More flexible response content handling

This commit is contained in:
Raphael Michel
2019-04-05 14:54:36 +02:00
parent d395db8142
commit f3128591d8

View File

@@ -53,7 +53,18 @@ class IdempotencyMiddleware:
call.delete()
else:
call.response_code = resp.status_code
call.response_body = resp.content.encode() if isinstance(resp.content, str) else resp.content
if isinstance(resp.content, str):
call.response_body = resp.content.encode()
elif isinstance(resp.content, memoryview):
call.response_body = resp.content.tobytes()
elif isinstance(resp.content, bytes):
call.response_body = resp.content
elif hasattr(resp.content, 'read'):
call.response_body = resp.read()
elif hasattr(resp, 'data'):
call.response_body = json.dumps(resp.data)
else:
call.response_body = repr(resp).encode()
call.response_headers = json.dumps(resp._headers)
call.locked = None
call.save(update_fields=['locked', 'response_code', 'response_headers',