1
0
mirror of https://github.com/django/django.git synced 2025-10-25 22:56:12 +00:00

Refs #34482 -- Reverted "Fixed #32969 -- Fixed pickling HttpResponse and subclasses."

This reverts commit d7f5bfd241.

Thanks Márton Salomváry for the report.
This commit is contained in:
Mariusz Felisiak
2023-04-12 09:46:18 +02:00
parent 280ca147af
commit 173034b005
5 changed files with 23 additions and 40 deletions

View File

@@ -369,31 +369,12 @@ class HttpResponse(HttpResponseBase):
"""
streaming = False
non_picklable_attrs = frozenset(
[
"resolver_match",
# Non-picklable attributes added by test clients.
"asgi_request",
"client",
"context",
"json",
"templates",
"wsgi_request",
]
)
def __init__(self, content=b"", *args, **kwargs):
super().__init__(*args, **kwargs)
# Content is a bytestring. See the `content` property methods.
self.content = content
def __getstate__(self):
obj_dict = self.__dict__.copy()
for attr in self.non_picklable_attrs:
if attr in obj_dict:
del obj_dict[attr]
return obj_dict
def __repr__(self):
return "<%(cls)s status_code=%(status_code)d%(content_type)s>" % {
"cls": self.__class__.__name__,

View File

@@ -8,9 +8,7 @@ class ContentNotRenderedError(Exception):
class SimpleTemplateResponse(HttpResponse):
non_picklable_attrs = HttpResponse.non_picklable_attrs | frozenset(
["template_name", "context_data", "_post_render_callbacks"]
)
rendering_attrs = ["template_name", "context_data", "_post_render_callbacks"]
def __init__(
self,
@@ -57,11 +55,16 @@ class SimpleTemplateResponse(HttpResponse):
Raise an exception if trying to pickle an unrendered response. Pickle
only rendered data, not the data used to construct the response.
"""
obj_dict = self.__dict__.copy()
if not self._is_rendered:
raise ContentNotRenderedError(
"The response content must be rendered before it can be pickled."
)
return super().__getstate__()
for attr in self.rendering_attrs:
if attr in obj_dict:
del obj_dict[attr]
return obj_dict
def resolve_template(self, template):
"""Accept a template object, path-to-template, or list of paths."""
@@ -142,9 +145,7 @@ class SimpleTemplateResponse(HttpResponse):
class TemplateResponse(SimpleTemplateResponse):
non_picklable_attrs = SimpleTemplateResponse.non_picklable_attrs | frozenset(
["_request"]
)
rendering_attrs = SimpleTemplateResponse.rendering_attrs + ["_request"]
def __init__(
self,