def translate_request(request):
    """This function takes the arguments passed to the request handler and
    uses them to generate a WSGI compatible environ dictionary.
    """
    class AwaitablePayload(object):
        def __init__(self, payload):
            self.payload = payload or b''

        async def read(self, length=None):
            if length is None:
                r = self.payload
                self.payload = b''
            else:
                r = self.payload[:length]
                self.payload = self.payload[length:]
            return r

    uri_parts = urlsplit(request.url)
    environ = {
        'wsgi.input': AwaitablePayload(request.body),
        'wsgi.errors': sys.stderr,
        'wsgi.version': (1, 0),
        'wsgi.async': True,
        'wsgi.multithread': False,
        'wsgi.multiprocess': False,
        'wsgi.run_once': False,
        'SERVER_SOFTWARE': 'sanic',
        'REQUEST_METHOD': request.method,
        'QUERY_STRING': uri_parts.query or '',
        'RAW_URI': request.url,
        'SERVER_PROTOCOL': 'HTTP/' + request.version,
        'REMOTE_ADDR': '127.0.0.1',
        'REMOTE_PORT': '0',
        'SERVER_NAME': 'sanic',
        'SERVER_PORT': '0',
        'sanic.request': request
    }

    for hdr_name, hdr_value in request.headers.items():
        hdr_name = hdr_name.upper()
        if hdr_name == 'CONTENT-TYPE':
            environ['CONTENT_TYPE'] = hdr_value
            continue
        elif hdr_name == 'CONTENT-LENGTH':
            environ['CONTENT_LENGTH'] = hdr_value
            continue

        key = 'HTTP_%s' % hdr_name.replace('-', '_')
        if key in environ:
            hdr_value = '%s,%s' % (environ[key], hdr_value)

        environ[key] = hdr_value

    environ['wsgi.url_scheme'] = environ.get('HTTP_X_FORWARDED_PROTO', 'http')

    path_info = uri_parts.path

    environ['PATH_INFO'] = path_info
    environ['SCRIPT_NAME'] = ''

    return environ
def translate_request ( request ) : class AwaitablePayload ( object ) : def __init__ ( self , payload ) : self . payload = payload or b'' async def read ( self , length = None ) : if length is None : r = self . payload self . payload = b'' else : r = self . payload [ : length ] self . payload = self . payload [ length : ] return r uri_parts = urlsplit ( request . url ) environ = { 'wsgi.input' : AwaitablePayload ( request . body ) , 'wsgi.errors' : sys . stderr , 'wsgi.version' : ( 1 , 0 ) , 'wsgi.async' : True , 'wsgi.multithread' : False , 'wsgi.multiprocess' : False , 'wsgi.run_once' : False , 'SERVER_SOFTWARE' : 'sanic' , 'REQUEST_METHOD' : request . method , 'QUERY_STRING' : uri_parts . query or '' , 'RAW_URI' : request . url , 'SERVER_PROTOCOL' : 'HTTP/' + request . version , 'REMOTE_ADDR' : '127.0.0.1' , 'REMOTE_PORT' : '0' , 'SERVER_NAME' : 'sanic' , 'SERVER_PORT' : '0' , 'sanic.request' : request } for hdr_name , hdr_value in request . headers . items ( ) : hdr_name = hdr_name . upper ( ) if hdr_name == 'CONTENT-TYPE' : environ [ 'CONTENT_TYPE' ] = hdr_value continue elif hdr_name == 'CONTENT-LENGTH' : environ [ 'CONTENT_LENGTH' ] = hdr_value continue key = 'HTTP_%s' % hdr_name . replace ( '-' , '_' ) if key in environ : hdr_value = '%s,%s' % ( environ [ key ] , hdr_value ) environ [ key ] = hdr_value environ [ 'wsgi.url_scheme' ] = environ . get ( 'HTTP_X_FORWARDED_PROTO' , 'http' ) path_info = uri_parts . path environ [ 'PATH_INFO' ] = path_info environ [ 'SCRIPT_NAME' ] = '' return environ
This function takes the arguments passed to the request handler and
    uses them to generate a WSGI compatible environ dictionary.