From 530e1aca0590633b06341a375d359cf5fd34d0a6 Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Tue, 29 Sep 2009 18:14:09 +0000 Subject: [PATCH] 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. ........ --- Lib/httplib.py | 3 ++- Lib/test/test_httplib.py | 17 ++++++++++++++++- Misc/ACKS | 1 + Misc/NEWS | 3 +++ 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/Lib/httplib.py b/Lib/httplib.py index 3566c0eb055..3623bc3853e 100644 --- a/Lib/httplib.py +++ b/Lib/httplib.py @@ -66,6 +66,7 @@ Req-started-unread-response _CS_REQ_STARTED Req-sent-unread-response _CS_REQ_SENT """ +from array import array import socket from sys import py3kwarning from urlparse import urlsplit @@ -732,7 +733,7 @@ class HTTPConnection: print "send:", repr(str) try: blocksize=8192 - if hasattr(str,'read') : + if hasattr(str,'read') and not isinstance(str, array): if self.debuglevel > 0: print "sendIng a read()able" data=str.read(blocksize) while data: diff --git a/Lib/test/test_httplib.py b/Lib/test/test_httplib.py index 54a2b0ea6dc..252834b8562 100644 --- a/Lib/test/test_httplib.py +++ b/Lib/test/test_httplib.py @@ -1,3 +1,4 @@ +import array import httplib import StringIO import socket @@ -15,7 +16,7 @@ class FakeSocket: self.data = '' def sendall(self, data): - self.data += data + self.data += ''.join(data) def makefile(self, mode, bufsize=None): if mode != 'r' and mode != 'rb': @@ -162,6 +163,20 @@ class BasicTest(TestCase): conn.request('GET', '/foo', body) self.assertTrue(sock.data.startswith(expected)) + def test_send(self): + expected = 'this is a test this is only a test' + conn = httplib.HTTPConnection('example.com') + sock = FakeSocket(None) + conn.sock = sock + conn.send(expected) + self.assertEquals(expected, sock.data) + sock.data = '' + conn.send(array.array('c', expected)) + self.assertEquals(expected, sock.data) + sock.data = '' + conn.send(StringIO.StringIO(expected)) + self.assertEquals(expected, sock.data) + def test_chunked(self): chunked_start = ( 'HTTP/1.1 200 OK\r\n' diff --git a/Misc/ACKS b/Misc/ACKS index 58ce2283775..db058eefe81 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -458,6 +458,7 @@ Nick Mathewson Graham Matthews Dieter Maurer Arnaud Mazin +Kirk McDonald Chris McDonough Greg McFarlane Alan McIntyre diff --git a/Misc/NEWS b/Misc/NEWS index 36ee04cca86..917e5d56edb 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -85,6 +85,9 @@ Core and Builtins Library ------- +- Issue #6790: Make it possible again to pass an `array.array` to + `httplib.HTTPConnection.send`. Patch by Kirk McDonald. + - Issue #6236, #6348: Fix various failures in the `io` module under AIX and other platforms, when using a non-gcc compiler. Patch by egreen.