mirror of https://github.com/django/django.git
Fixed #13222 -- Repeated iteration of HttpResponse
Thanks teepark for the report and grahamd for his insights.
This commit is contained in:
parent
e70170c2cb
commit
6a64822bf4
|
@ -260,9 +260,9 @@ class HttpResponse(HttpResponseBase):
|
|||
else:
|
||||
self._container = [value]
|
||||
self._base_content_is_iter = False
|
||||
self._iterator = iter(self._container)
|
||||
|
||||
def __iter__(self):
|
||||
self._iterator = iter(self._container)
|
||||
return self
|
||||
|
||||
def __next__(self):
|
||||
|
@ -284,7 +284,7 @@ class HttpResponse(HttpResponseBase):
|
|||
def tell(self):
|
||||
if self._base_content_is_iter:
|
||||
raise Exception("This %s instance cannot tell its position" % self.__class__.__name__)
|
||||
return sum([len(chunk) for chunk in self])
|
||||
return len(self.content)
|
||||
|
||||
|
||||
class StreamingHttpResponse(HttpResponseBase):
|
||||
|
|
|
@ -330,6 +330,13 @@ class HttpResponseTests(unittest.TestCase):
|
|||
self.assertRaises(UnicodeEncodeError,
|
||||
getattr, r, 'content')
|
||||
|
||||
def test_iterator_isnt_rewound(self):
|
||||
# Regression test for #13222
|
||||
r = HttpResponse('abc')
|
||||
i = iter(r)
|
||||
self.assertEqual(list(i), [b'abc'])
|
||||
self.assertEqual(list(i), [])
|
||||
|
||||
def test_file_interface(self):
|
||||
r = HttpResponse()
|
||||
r.write(b"hello")
|
||||
|
|
Loading…
Reference in New Issue