mirror of
https://github.com/django/daphne.git
synced 2025-07-14 18:02:17 +03:00
Fix request/response compatability
This commit is contained in:
parent
4c65ad4c09
commit
9b92eec43a
|
@ -1,5 +1,7 @@
|
||||||
from django.http import HttpRequest
|
from django.http import HttpRequest
|
||||||
from django.utils.datastructures import MultiValueDict
|
from django.utils.datastructures import MultiValueDict
|
||||||
|
from django.http.request import QueryDict
|
||||||
|
from django.conf import settings
|
||||||
|
|
||||||
|
|
||||||
def encode_request(request):
|
def encode_request(request):
|
||||||
|
@ -25,8 +27,8 @@ def decode_request(value):
|
||||||
Decodes a request JSONish value to a HttpRequest object.
|
Decodes a request JSONish value to a HttpRequest object.
|
||||||
"""
|
"""
|
||||||
request = HttpRequest()
|
request = HttpRequest()
|
||||||
request.GET = MultiValueDict(value['GET'])
|
request.GET = CustomQueryDict(value['GET'])
|
||||||
request.POST = MultiValueDict(value['POST'])
|
request.POST = CustomQueryDict(value['POST'])
|
||||||
request.COOKIES = value['COOKIES']
|
request.COOKIES = value['COOKIES']
|
||||||
request.META = value['META']
|
request.META = value['META']
|
||||||
request.path = value['path']
|
request.path = value['path']
|
||||||
|
@ -34,3 +36,12 @@ def decode_request(value):
|
||||||
request.path_info = value['path_info']
|
request.path_info = value['path_info']
|
||||||
request.response_channel = value['response_channel']
|
request.response_channel = value['response_channel']
|
||||||
return request
|
return request
|
||||||
|
|
||||||
|
|
||||||
|
class CustomQueryDict(QueryDict):
|
||||||
|
"""
|
||||||
|
Custom override of QueryDict that sets things directly.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, values):
|
||||||
|
MultiValueDict.__init__(self, values)
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
|
from django.http.cookie import SimpleCookie
|
||||||
from six import PY3
|
from six import PY3
|
||||||
|
|
||||||
|
|
||||||
|
@ -6,12 +7,12 @@ def encode_response(response):
|
||||||
"""
|
"""
|
||||||
Encodes a response to JSON-compatible datastructures
|
Encodes a response to JSON-compatible datastructures
|
||||||
"""
|
"""
|
||||||
# TODO: Entirely useful things like cookies
|
|
||||||
value = {
|
value = {
|
||||||
"content_type": getattr(response, "content_type", None),
|
"content_type": getattr(response, "content_type", None),
|
||||||
"content": response.content,
|
"content": response.content,
|
||||||
"status_code": response.status_code,
|
"status_code": response.status_code,
|
||||||
"headers": list(response._headers.values()),
|
"headers": list(response._headers.values()),
|
||||||
|
"cookies": {k: v.output(header="") for k, v in response.cookies.items()}
|
||||||
}
|
}
|
||||||
if PY3:
|
if PY3:
|
||||||
value["content"] = value["content"].decode('utf8')
|
value["content"] = value["content"].decode('utf8')
|
||||||
|
@ -28,6 +29,8 @@ def decode_response(value):
|
||||||
content_type = value['content_type'],
|
content_type = value['content_type'],
|
||||||
status = value['status_code'],
|
status = value['status_code'],
|
||||||
)
|
)
|
||||||
|
for cookie in value['cookies'].values():
|
||||||
|
response.cookies.load(cookie)
|
||||||
response._headers = {k.lower: (k, v) for k, v in value['headers']}
|
response._headers = {k.lower: (k, v) for k, v in value['headers']}
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user