diff options
| author | Aymeric Augustin <aymeric.augustin@m4x.org> | 2012-10-22 22:52:36 +0200 |
|---|---|---|
| committer | Aymeric Augustin <aymeric.augustin@m4x.org> | 2012-10-22 22:52:36 +0200 |
| commit | 6a64822bf4632707212314a25a843c862bdb3874 (patch) | |
| tree | 6955dd22ff43a490c3b0b84ec18d42df13c37d28 | |
| parent | e70170c2cbc8871f3bc1f585601b831eef0be9dc (diff) | |
Fixed #13222 -- Repeated iteration of HttpResponse
Thanks teepark for the report and grahamd for his insights.
| -rw-r--r-- | django/http/response.py | 4 | ||||
| -rw-r--r-- | tests/regressiontests/httpwrappers/tests.py | 7 |
2 files changed, 9 insertions, 2 deletions
diff --git a/django/http/response.py b/django/http/response.py index 4a5c479419..49145cd822 100644 --- a/django/http/response.py +++ b/django/http/response.py @@ -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): diff --git a/tests/regressiontests/httpwrappers/tests.py b/tests/regressiontests/httpwrappers/tests.py index bfb4ae1fd5..803cbf029f 100644 --- a/tests/regressiontests/httpwrappers/tests.py +++ b/tests/regressiontests/httpwrappers/tests.py @@ -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") |
