[Python-checkins] r70109 - in python/branches/py3k: Lib/http/client.py Lib/test/test_httplib.py Misc/ACKS

benjamin.peterson python-checkins at python.org
Mon Mar 2 23:50:25 CET 2009


Author: benjamin.peterson
Date: Mon Mar  2 23:50:25 2009
New Revision: 70109

Log:
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
........


Modified:
   python/branches/py3k/   (props changed)
   python/branches/py3k/Lib/http/client.py
   python/branches/py3k/Lib/test/test_httplib.py
   python/branches/py3k/Misc/ACKS

Modified: python/branches/py3k/Lib/http/client.py
==============================================================================
--- python/branches/py3k/Lib/http/client.py	(original)
+++ python/branches/py3k/Lib/http/client.py	Mon Mar  2 23:50:25 2009
@@ -578,7 +578,7 @@
         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 @@
     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

Modified: python/branches/py3k/Lib/test/test_httplib.py
==============================================================================
--- python/branches/py3k/Lib/test/test_httplib.py	(original)
+++ python/branches/py3k/Lib/test/test_httplib.py	Mon Mar  2 23:50:25 2009
@@ -181,6 +181,8 @@
                 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 @@
         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):

Modified: python/branches/py3k/Misc/ACKS
==============================================================================
--- python/branches/py3k/Misc/ACKS	(original)
+++ python/branches/py3k/Misc/ACKS	Mon Mar  2 23:50:25 2009
@@ -767,6 +767,7 @@
 Blake Winton
 Jean-Claude Wippler
 Lars Wirzenius
+Chris Withers
 Stefan Witzel
 David Wolever
 Klaus-Juergen Wolf


More information about the Python-checkins mailing list