Beispiel #1
0
def make_request(scope, url, method, params, body, headers, **kwargs):
    path, query = urlparse(url).path, urlparse(url).query
    request = HttpRequest()
    request.path = path
    request.session = scope.get('session', None)
    content = json.dumps(body)

    request.META['HTTP_CONTENT_TYPE'] = 'application/json'
    request.META['HTTP_ACCEPT'] = 'application/json'
    request.META['HTTP_CONTENT_LENGTH'] = len(content)
    request.META['QUERY_STRING'] = query or ''

    request._read_started = False
    request._stream = BytesIO(content.encode('utf-8'))

    for (header_name, value) in scope.get('headers', []):
        request.META[header_name.decode('utf-8')] = value.decode('utf-8')

    query_s, data = QueryDict(query, mutable=True), QueryDict(mutable=True)
    print(params, query_s)
    query_s.update(params)
    data.update(body)

    request.method = method
    request.POST = data
    request.GET = query_s
    if scope.get('cookies'):
        request.COOKIES = scope.get('cookies')

    for k, v in headers.items():
        header = f'HTTP_{k.upper()}'
        request.META[header] = v.encode()

    if "server" in scope:
        request.META["SERVER_NAME"] = scope["server"][0]
        request.META["SERVER_PORT"] = scope["server"][1]
    else:
        request.META["SERVER_NAME"] = "localhost"
        request.META["SERVER_PORT"] = 80

    for k, v in kwargs.items():
        setattr(request, k, v)
    return request
Beispiel #2
0
def convert_request(request):
    """
    Converts an aiohttp Request to a Django HttpRequest

    This does not convert the async body to a sync body for POST requests
    """
    djr = HttpRequest()
    djr.method = request.method
    upper_keys = {k.upper() for k in request.headers.keys()}
    # These two headers are specially set by Django without the HTTP prefix
    h = {"CONTENT_LENGTH", "CONTENT_TYPE"}
    djr.META = {
        f"HTTP_{k}" if k not in h else k: request.headers[k]
        for k in upper_keys
    }
    djr.COOKIES = request.cookies
    djr.path = request.path
    djr.path_info = request.match_info.get("path", "")
    djr.encoding = request.charset
    djr.GET = request.query

    djr._get_scheme = lambda: request.scheme
    return djr