fix bug that causes iter_lines to truncate content

Currently, if the response does not terminate with a newline, iter_lines
truncates the trailing remainder.
This commit is contained in:
Ori Livneh
2011-12-20 02:01:37 -05:00
parent f80fbad4ff
commit f214b91d77
2 changed files with 23 additions and 1 deletions
+6 -1
View File
@@ -597,7 +597,7 @@ class Response(object):
def generate():
chunk = []
while 1:
while True:
c = self.raw.read(1)
if not c:
break
@@ -608,6 +608,11 @@ class Response(object):
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
gen = generate()
+17
View File
@@ -3,6 +3,7 @@
from __future__ import with_statement
import StringIO
import time
import os
import unittest
@@ -603,5 +604,21 @@ class RequestsTestSuite(unittest.TestCase):
self.assertEqual(i, len_lines)
# Test 'dangling' fragment in responses that do not terminate in
# a newline.
quote = (
'''Why will he not upon our fair request\n'''
'''Untent his person and share the air with us?'''
)
# Make a request and monkey-patch its contents
r = requests.get(httpbin('get'))
r.raw = StringIO.StringIO(quote)
# Make sure iter_lines doesn't chop the trailing bit
lines = '\n'.join(r.iter_lines())
self.assertEqual(lines, quote)
if __name__ == '__main__':
unittest.main()