mirror of
https://github.com/kennethreitz/requests.git
synced 2026-06-05 22:50:18 +00:00
fix iteration on null responses in safe_mode
This commit is contained in:
+22
-19
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user