Commit 6a64822b authored by Aymeric Augustin's avatar Aymeric Augustin
Browse files

Fixed #13222 -- Repeated iteration of HttpResponse

Thanks teepark for the report and grahamd for his insights.
parent e70170c2
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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):
+7 −0
Original line number Diff line number Diff line
@@ -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")