Decode response.content everywhere except in tests.

response.content is binary data, but code usually assumes it to
be text.  Fix this by decoding response.content where required.
Don't do this in tests yet.
This commit is contained in:
Eklavya Sharma
2016-07-12 18:40:01 +05:30
committed by Tim Abbott
parent 97f28f3792
commit 2080ff6c2a
2 changed files with 6 additions and 5 deletions

View File

@@ -5,6 +5,7 @@ import ujson
from typing import Optional, Any, Dict, List from typing import Optional, Any, Dict, List
from six import text_type from six import text_type
from zerver.lib.str_utils import force_bytes
class HttpResponseUnauthorized(HttpResponse): class HttpResponseUnauthorized(HttpResponse):
@@ -23,16 +24,16 @@ class HttpResponseUnauthorized(HttpResponse):
def json_unauthorized(message, www_authenticate=None): def json_unauthorized(message, www_authenticate=None):
# type: (text_type, Optional[text_type]) -> HttpResponse # type: (text_type, Optional[text_type]) -> HttpResponse
resp = HttpResponseUnauthorized("zulip", www_authenticate=www_authenticate) resp = HttpResponseUnauthorized("zulip", www_authenticate=www_authenticate)
resp.content = ujson.dumps({"result": "error", resp.content = force_bytes(ujson.dumps({"result": "error",
"msg": message}) + "\n" "msg": message}) + "\n")
return resp return resp
def json_method_not_allowed(methods): def json_method_not_allowed(methods):
# type: (List[text_type]) -> text_type # type: (List[text_type]) -> text_type
resp = HttpResponseNotAllowed(methods) resp = HttpResponseNotAllowed(methods)
resp.content = ujson.dumps({"result": "error", resp.content = force_bytes(ujson.dumps({"result": "error",
"msg": "Method Not Allowed", "msg": "Method Not Allowed",
"allowed_methods": methods}) "allowed_methods": methods}))
return resp return resp
def json_response(res_type="success", msg="", data=None, status=200): def json_response(res_type="success", msg="", data=None, status=200):

View File

@@ -316,7 +316,7 @@ class MessageSenderWorker(QueueProcessingWorker):
server_meta['time_request_finished'] = time.time() server_meta['time_request_finished'] = time.time()
server_meta['worker_log_data'] = request._log_data server_meta['worker_log_data'] = request._log_data
resp_content = resp.content resp_content = resp.content.decode('utf-8')
result = {'response': ujson.loads(resp_content), 'req_id': event['req_id'], result = {'response': ujson.loads(resp_content), 'req_id': event['req_id'],
'server_meta': server_meta} 'server_meta': server_meta}