diff options
author | Antoine Pitrou <solipsis@pitrou.net> | 2009-09-29 18:44:53 (GMT) |
---|---|---|
committer | Antoine Pitrou <solipsis@pitrou.net> | 2009-09-29 18:44:53 (GMT) |
commit | ead1d62d3239109656d4b3fd2f99461dddb2fae1 (patch) | |
tree | 96627b09fe56dd5d6d2c0aed02d74e9b7079e008 | |
parent | 8da3cac4a054e7edccfecce71f4f526e329c730f (diff) | |
download | cpython-ead1d62d3239109656d4b3fd2f99461dddb2fae1.zip cpython-ead1d62d3239109656d4b3fd2f99461dddb2fae1.tar.gz cpython-ead1d62d3239109656d4b3fd2f99461dddb2fae1.tar.bz2 |
[NOTE: the original bug doesn't exist in py3k but this adds Kirk's tests and fixes
another bug in the process]
Merged revisions 75134 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r75134 | antoine.pitrou | 2009-09-29 19:48:18 +0200 (mar., 29 sept. 2009) | 4 lines
Issue #6790: Make it possible again to pass an `array.array` to
`httplib.HTTPConnection.send`. Patch by Kirk McDonald.
........
-rw-r--r-- | Lib/http/client.py | 15 | ||||
-rw-r--r-- | Lib/test/test_httplib.py | 15 | ||||
-rw-r--r-- | Misc/ACKS | 1 |
3 files changed, 27 insertions, 4 deletions
diff --git a/Lib/http/client.py b/Lib/http/client.py index b7092de..fef7185 100644 --- a/Lib/http/client.py +++ b/Lib/http/client.py @@ -726,10 +726,17 @@ class HTTPConnection: if self.debuglevel > 0: print("sendIng a read()able") encode = False - if "b" not in str.mode: - encode = True - if self.debuglevel > 0: - print("encoding file using iso-8859-1") + try: + mode = str.mode + except AttributeError: + # io.BytesIO and other file-like objects don't have a `mode` + # attribute. + pass + else: + if "b" not in mode: + encode = True + if self.debuglevel > 0: + print("encoding file using iso-8859-1") while 1: data = str.read(blocksize) if not data: diff --git a/Lib/test/test_httplib.py b/Lib/test/test_httplib.py index 2d76f7a..37cda5d 100644 --- a/Lib/test/test_httplib.py +++ b/Lib/test/test_httplib.py @@ -1,6 +1,7 @@ import errno from http import client import io +import array import socket from unittest import TestCase @@ -174,6 +175,20 @@ class BasicTest(TestCase): self.assertTrue(sock.data.startswith(expected), '%r != %r' % (sock.data[:len(expected)], expected)) + def test_send(self): + expected = b'this is a test this is only a test' + conn = client.HTTPConnection('example.com') + sock = FakeSocket(None) + conn.sock = sock + conn.send(expected) + self.assertEquals(expected, sock.data) + sock.data = b'' + conn.send(array.array('b', expected)) + self.assertEquals(expected, sock.data) + sock.data = b'' + conn.send(io.BytesIO(expected)) + self.assertEquals(expected, sock.data) + def test_chunked(self): chunked_start = ( 'HTTP/1.1 200 OK\r\n' @@ -481,6 +481,7 @@ Nick Mathewson Graham Matthews Dieter Maurer Arnaud Mazin +Kirk McDonald Chris McDonough Greg McFarlane Alan McIntyre |