mirror of
https://github.com/python/cpython.git
synced 2025-08-01 15:43:13 +00:00
give httplib.IncompleteRead a more sane repr #4308
This commit is contained in:
parent
ce45a967c2
commit
7d49bba969
4 changed files with 34 additions and 2 deletions
|
@ -626,7 +626,7 @@ class HTTPResponse:
|
|||
while amt > 0:
|
||||
chunk = self.fp.read(min(amt, MAXAMOUNT))
|
||||
if not chunk:
|
||||
raise IncompleteRead(s)
|
||||
raise IncompleteRead(''.join(s), amt)
|
||||
s.append(chunk)
|
||||
amt -= len(chunk)
|
||||
return ''.join(s)
|
||||
|
@ -1161,9 +1161,18 @@ class UnimplementedFileMode(HTTPException):
|
|||
pass
|
||||
|
||||
class IncompleteRead(HTTPException):
|
||||
def __init__(self, partial):
|
||||
def __init__(self, partial, expected=None):
|
||||
self.args = 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):
|
||||
pass
|
||||
|
|
|
@ -185,6 +185,8 @@ class BasicTest(TestCase):
|
|||
resp.read()
|
||||
except httplib.IncompleteRead, i:
|
||||
self.assertEquals(i.partial, 'hello world')
|
||||
self.assertEqual(repr(i),'IncompleteRead(11 bytes read)')
|
||||
self.assertEqual(str(i),'IncompleteRead(11 bytes read)')
|
||||
else:
|
||||
self.fail('IncompleteRead expected')
|
||||
finally:
|
||||
|
@ -198,6 +200,23 @@ class BasicTest(TestCase):
|
|||
self.assertEquals(resp.read(), 'Hello\r\n')
|
||||
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):
|
||||
def test_responses(self):
|
||||
|
|
|
@ -765,6 +765,7 @@ Dik Winter
|
|||
Blake Winton
|
||||
Jean-Claude Wippler
|
||||
Lars Wirzenius
|
||||
Chris Withers
|
||||
Stefan Witzel
|
||||
David Wolever
|
||||
Klaus-Juergen Wolf
|
||||
|
|
|
@ -168,6 +168,9 @@ Core and Builtins
|
|||
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
|
||||
import guess_extension`` was used.
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue