Skip to content

Commit

Permalink
Fix request/response compatability
Browse files Browse the repository at this point in the history
  • Loading branch information
andrewgodwin committed Sep 7, 2015
1 parent 4c65ad4 commit 9b92eec
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 3 deletions.
15 changes: 13 additions & 2 deletions channels/request.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
from django.http import HttpRequest
from django.utils.datastructures import MultiValueDict
from django.http.request import QueryDict
from django.conf import settings


def encode_request(request):
Expand All @@ -25,12 +27,21 @@ def decode_request(value):
Decodes a request JSONish value to a HttpRequest object.
"""
request = HttpRequest()
request.GET = MultiValueDict(value['GET'])
request.POST = MultiValueDict(value['POST'])
request.GET = CustomQueryDict(value['GET'])
request.POST = CustomQueryDict(value['POST'])
request.COOKIES = value['COOKIES']
request.META = value['META']
request.path = value['path']
request.method = value['method']
request.path_info = value['path_info']
request.response_channel = value['response_channel']
return request


class CustomQueryDict(QueryDict):
"""
Custom override of QueryDict that sets things directly.
"""

def __init__(self, values):
MultiValueDict.__init__(self, values)
5 changes: 4 additions & 1 deletion channels/response.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
from django.http import HttpResponse
from django.http.cookie import SimpleCookie
from six import PY3


def encode_response(response):
"""
Encodes a response to JSON-compatible datastructures
"""
# TODO: Entirely useful things like cookies
value = {
"content_type": getattr(response, "content_type", None),
"content": response.content,
"status_code": response.status_code,
"headers": list(response._headers.values()),
"cookies": {k: v.output(header="") for k, v in response.cookies.items()}
}
if PY3:
value["content"] = value["content"].decode('utf8')
Expand All @@ -28,6 +29,8 @@ def decode_response(value):
content_type = value['content_type'],
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']}
return response

Expand Down

0 comments on commit 9b92eec

Please sign in to comment.