mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
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:
parent
a4f52b12d6
commit
6accb988a1
3 changed files with 31 additions and 2 deletions
|
@ -578,7 +578,7 @@ class HTTPResponse(io.RawIOBase):
|
||||||
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(b''.join(s), amt)
|
||||||
s.append(chunk)
|
s.append(chunk)
|
||||||
amt -= len(chunk)
|
amt -= len(chunk)
|
||||||
return b"".join(s)
|
return b"".join(s)
|
||||||
|
@ -1009,9 +1009,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
|
||||||
|
|
|
@ -181,6 +181,8 @@ class BasicTest(TestCase):
|
||||||
resp.read()
|
resp.read()
|
||||||
except httplib.IncompleteRead as i:
|
except httplib.IncompleteRead as i:
|
||||||
self.assertEquals(i.partial, b'hello world')
|
self.assertEquals(i.partial, b'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:
|
||||||
|
@ -194,6 +196,23 @@ class BasicTest(TestCase):
|
||||||
self.assertEquals(resp.read(), b'Hello\r\n')
|
self.assertEquals(resp.read(), b'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, 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):
|
class OfflineTest(TestCase):
|
||||||
def test_responses(self):
|
def test_responses(self):
|
||||||
|
|
|
@ -767,6 +767,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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue