Merged revisions 70107 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/trunk

........
  r70107 | benjamin.peterson | 2009-03-02 16:41:42 -0600 (Mon, 02 Mar 2009) | 1 line

  give httplib.IncompleteRead a more sane repr #4308
........
This commit is contained in:
Benjamin Peterson 2009-03-02 22:50:25 +00:00
parent a4f52b12d6
commit 6accb988a1
3 changed files with 31 additions and 2 deletions

View File

@ -578,7 +578,7 @@ class HTTPResponse(io.RawIOBase):
while amt > 0:
chunk = self.fp.read(min(amt, MAXAMOUNT))
if not chunk:
raise IncompleteRead(s)
raise IncompleteRead(b''.join(s), amt)
s.append(chunk)
amt -= len(chunk)
return b"".join(s)
@ -1009,9 +1009,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

View File

@ -181,6 +181,8 @@ class BasicTest(TestCase):
resp.read()
except httplib.IncompleteRead as i:
self.assertEquals(i.partial, b'hello world')
self.assertEqual(repr(i),'IncompleteRead(11 bytes read)')
self.assertEqual(str(i),'IncompleteRead(11 bytes read)')
else:
self.fail('IncompleteRead expected')
finally:
@ -194,6 +196,23 @@ class BasicTest(TestCase):
self.assertEquals(resp.read(), b'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, b'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):

View File

@ -767,6 +767,7 @@ Dik Winter
Blake Winton
Jean-Claude Wippler
Lars Wirzenius
Chris Withers
Stefan Witzel
David Wolever
Klaus-Juergen Wolf