[Python-checkins] r58530 - in python/trunk/Lib: httplib.py test/test_httplib.py

facundo.batista python-checkins at python.org
Thu Oct 18 05:16:03 CEST 2007


Author: facundo.batista
Date: Thu Oct 18 05:16:03 2007
New Revision: 58530

Modified:
   python/trunk/Lib/httplib.py
   python/trunk/Lib/test/test_httplib.py
Log:

Issue #1580738.  When HTTPConnection reads the whole stream with read(),
it closes itself.  When the stream is read in several calls to read(n),
it should behave in the same way if HTTPConnection knows where the end
of the stream is (through self.length).  Added a test case for this
behaviour. 


Modified: python/trunk/Lib/httplib.py
==============================================================================
--- python/trunk/Lib/httplib.py	(original)
+++ python/trunk/Lib/httplib.py	Thu Oct 18 05:16:03 2007
@@ -530,7 +530,8 @@
         s = self.fp.read(amt)
         if self.length is not None:
             self.length -= len(s)
-
+            if not self.length:
+                self.close()
         return s
 
     def _read_chunked(self, amt):

Modified: python/trunk/Lib/test/test_httplib.py
==============================================================================
--- python/trunk/Lib/test/test_httplib.py	(original)
+++ python/trunk/Lib/test/test_httplib.py	Thu Oct 18 05:16:03 2007
@@ -81,13 +81,25 @@
         resp = httplib.HTTPResponse(sock)
         resp.begin()
         self.assertEqual(resp.read(), 'Text')
-        resp.close()
+        self.assertTrue(resp.isclosed())
 
         body = "HTTP/1.1 400.100 Not Ok\r\n\r\nText"
         sock = FakeSocket(body)
         resp = httplib.HTTPResponse(sock)
         self.assertRaises(httplib.BadStatusLine, resp.begin)
 
+    def test_partial_reads(self):
+        # if we have a lenght, the system knows when to close itself
+        # same behaviour than when we read the whole thing with read()
+        body = "HTTP/1.1 200 Ok\r\nContent-Length: 4\r\n\r\nText"
+        sock = FakeSocket(body)
+        resp = httplib.HTTPResponse(sock)
+        resp.begin()
+        self.assertEqual(resp.read(2), 'Te')
+        self.assertFalse(resp.isclosed())
+        self.assertEqual(resp.read(2), 'xt')
+        self.assertTrue(resp.isclosed())
+
     def test_host_port(self):
         # Check invalid host_port
 
@@ -133,7 +145,6 @@
         resp.begin()
         if resp.read() != "":
             self.fail("Did not expect response from HEAD request")
-        resp.close()
 
     def test_send_file(self):
         expected = 'GET /foo HTTP/1.1\r\nHost: example.com\r\n' \


More information about the Python-checkins mailing list