Kaydet (Commit) 7d49bba9 authored tarafından Benjamin Peterson's avatar Benjamin Peterson

give httplib.IncompleteRead a more sane repr #4308

üst ce45a967
...@@ -626,7 +626,7 @@ class HTTPResponse: ...@@ -626,7 +626,7 @@ class HTTPResponse:
while amt > 0: while amt > 0:
chunk = self.fp.read(min(amt, MAXAMOUNT)) chunk = self.fp.read(min(amt, MAXAMOUNT))
if not chunk: if not chunk:
raise IncompleteRead(s) raise IncompleteRead(''.join(s), amt)
s.append(chunk) s.append(chunk)
amt -= len(chunk) amt -= len(chunk)
return ''.join(s) return ''.join(s)
...@@ -1161,9 +1161,18 @@ class UnimplementedFileMode(HTTPException): ...@@ -1161,9 +1161,18 @@ class UnimplementedFileMode(HTTPException):
pass pass
class IncompleteRead(HTTPException): class IncompleteRead(HTTPException):
def __init__(self, partial): def __init__(self, partial, expected=None):
self.args = partial, self.args = partial,
self.partial = partial self.partial = partial
self.expected = expected
def __repr__(self):
if self.expected is not None:
e = ', %i more expected' % self.expected
else:
e = ''
return 'IncompleteRead(%i bytes read%s)' % (len(self.partial), e)
def __str__(self):
return repr(self)
class ImproperConnectionState(HTTPException): class ImproperConnectionState(HTTPException):
pass pass
......
...@@ -185,6 +185,8 @@ class BasicTest(TestCase): ...@@ -185,6 +185,8 @@ class BasicTest(TestCase):
resp.read() resp.read()
except httplib.IncompleteRead, i: except httplib.IncompleteRead, i:
self.assertEquals(i.partial, 'hello world') self.assertEquals(i.partial, 'hello world')
self.assertEqual(repr(i),'IncompleteRead(11 bytes read)')
self.assertEqual(str(i),'IncompleteRead(11 bytes read)')
else: else:
self.fail('IncompleteRead expected') self.fail('IncompleteRead expected')
finally: finally:
...@@ -198,6 +200,23 @@ class BasicTest(TestCase): ...@@ -198,6 +200,23 @@ class BasicTest(TestCase):
self.assertEquals(resp.read(), 'Hello\r\n') self.assertEquals(resp.read(), 'Hello\r\n')
resp.close() resp.close()
def test_incomplete_read(self):
sock = FakeSocket('HTTP/1.1 200 OK\r\nContent-Length: 10\r\n\r\nHello\r\n')
resp = httplib.HTTPResponse(sock, method="GET")
resp.begin()
try:
resp.read()
except httplib.IncompleteRead as i:
self.assertEquals(i.partial, 'Hello\r\n')
self.assertEqual(repr(i),
"IncompleteRead(7 bytes read, 3 more expected)")
self.assertEqual(str(i),
"IncompleteRead(7 bytes read, 3 more expected)")
else:
self.fail('IncompleteRead expected')
finally:
resp.close()
class OfflineTest(TestCase): class OfflineTest(TestCase):
def test_responses(self): def test_responses(self):
......
...@@ -765,6 +765,7 @@ Dik Winter ...@@ -765,6 +765,7 @@ Dik Winter
Blake Winton Blake Winton
Jean-Claude Wippler Jean-Claude Wippler
Lars Wirzenius Lars Wirzenius
Chris Withers
Stefan Witzel Stefan Witzel
David Wolever David Wolever
Klaus-Juergen Wolf Klaus-Juergen Wolf
......
...@@ -168,6 +168,9 @@ Core and Builtins ...@@ -168,6 +168,9 @@ Core and Builtins
Library Library
------- -------
- Issue #4308: httplib.IncompleteRead's repr doesn't include all of the data all
ready received.
- Issue #5401: Fixed a performance problem in mimetypes when ``from mimetypes - Issue #5401: Fixed a performance problem in mimetypes when ``from mimetypes
import guess_extension`` was used. import guess_extension`` was used.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment