fix iteration on null responses in safe_mode

This commit is contained in:
Ori Livneh
2011-12-22 21:10:43 -05:00
parent a7223f86a9
commit 716d29c49c
2 changed files with 33 additions and 19 deletions
+22 -19
View File
@@ -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:
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)
chunk = []
else:
chunk.append(c)
# Yield the remainder, in case the response
# did not terminate with a newline
if chunk:
yield ''.join(chunk)
self._content_consumed = True
+11
View File
@@ -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