From: Ori Livneh Date: Fri, 23 Dec 2011 02:10:43 +0000 (-0500) Subject: fix iteration on null responses in safe_mode X-Git-Tag: v0.8.7~4 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=716d29c49c346106b25fadd1d15d6bd79cd6847a;p=services%2Fpython-requests.git fix iteration on null responses in safe_mode --- diff --git a/requests/models.py b/requests/models.py index 09ea87d..a51ee70 100644 --- a/requests/models.py +++ b/requests/models.py @@ -559,11 +559,13 @@ class Response(object): ) def generate(): - while 1: - chunk = self.raw.read(chunk_size) - if not chunk: - break - yield chunk + # self.raw can be None if we're in safe_mode and the request failed + if self.raw is not None: + while 1: + chunk = self.raw.read(chunk_size) + if not chunk: + break + yield chunk self._content_consumed = True gen = generate() @@ -597,23 +599,24 @@ class Response(object): ) def generate(): - chunk = [] + if self.raw is not None: + chunk = [] - while 1: - c = self.raw.read(1) - if not c: - break + while 1: + c = self.raw.read(1) + if not c: + break - if c in newlines: - yield ''.join(chunk) - chunk = [] - else: - chunk.append(c) + if c in newlines: + yield ''.join(chunk) + chunk = [] + else: + chunk.append(c) - # Yield the remainder, in case the response - # did not terminate with a newline - if chunk: - yield ''.join(chunk) + # Yield the remainder, in case the response + # did not terminate with a newline + if chunk: + yield ''.join(chunk) self._content_consumed = True diff --git a/test_requests.py b/test_requests.py index e547aa6..2543103 100755 --- a/test_requests.py +++ b/test_requests.py @@ -619,6 +619,17 @@ class RequestsTestSuite(unittest.TestCase): lines = '\n'.join(r.iter_lines()) self.assertEqual(lines, quote) + def test_null_response(self): + + # Safe mode creates empty responses for failed requests. + + # Iterating on these responses should produce empty sequences + r = requests.get('http://_/', config=dict(safe_mode=True)) + self.assertEquals(list(r.iter_lines()), []) + + r = requests.get('http://_/', config=dict(safe_mode=True)) + self.assertEquals(list(r.iter_content()), []) + def test_timeout(self): # When not in safe mode, should raise Timeout exception