This commit is contained in:
Renato Rufino dos Santos 2014-07-28 22:57:11 +00:00
commit 6399c4776c
2 changed files with 22 additions and 12 deletions

View File

@ -603,3 +603,20 @@ except ImportError:
klass.__unicode__ = klass.__str__
klass.__str__ = lambda self: self.__unicode__().encode('utf-8')
return klass
from django.template.response import SimpleTemplateResponse as _SimpleTemplateResponse
if django.VERSION >= (1, 4):
SimpleTemplateResponse = _SimpleTemplateResponse
else:
class SimpleTemplateResponse(_SimpleTemplateResponse):
rendering_attrs = []
def __getstate__(self):
state = super(SimpleTemplateResponse, self).__getstate__()
#apply the same logic django >= 1.4 implements
for key in self.rendering_attrs:
if key in state:
del state[key]
return state

View File

@ -6,8 +6,7 @@ The appropriate renderer is called during Django's template response rendering.
"""
from __future__ import unicode_literals
from django.core.handlers.wsgi import STATUS_CODE_TEXT
from django.template.response import SimpleTemplateResponse
from rest_framework.compat import six
from rest_framework.compat import six, SimpleTemplateResponse
class Response(SimpleTemplateResponse):
@ -15,6 +14,10 @@ class Response(SimpleTemplateResponse):
An HttpResponse that allows its data to be rendered into
arbitrary media types.
"""
# SimpleTemplateResponse use this property in __getstate__ to remove attrs
# from being pickled so we inherit and use it as well
rendering_attrs = SimpleTemplateResponse.rendering_attrs + \
['accepted_renderer', 'renderer_context', 'data']
def __init__(self, data=None, status=200,
template_name=None, headers=None,
@ -76,13 +79,3 @@ class Response(SimpleTemplateResponse):
# TODO: Deprecate and use a template tag instead
# TODO: Status code text for RFC 6585 status codes
return STATUS_CODE_TEXT.get(self.status_code, '')
def __getstate__(self):
"""
Remove attributes from the response that shouldn't be cached
"""
state = super(Response, self).__getstate__()
for key in ('accepted_renderer', 'renderer_context', 'data'):
if key in state:
del state[key]
return state