[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.
........
This commit is contained in:
Antoine Pitrou 2009-09-29 18:44:53 +00:00
parent 8da3cac4a0
commit ead1d62d32
3 changed files with 27 additions and 4 deletions

View File

@ -726,10 +726,17 @@ class HTTPConnection:
if self.debuglevel > 0: if self.debuglevel > 0:
print("sendIng a read()able") print("sendIng a read()able")
encode = False encode = False
if "b" not in str.mode: try:
encode = True mode = str.mode
if self.debuglevel > 0: except AttributeError:
print("encoding file using iso-8859-1") # 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: while 1:
data = str.read(blocksize) data = str.read(blocksize)
if not data: if not data:

View File

@ -1,6 +1,7 @@
import errno import errno
from http import client from http import client
import io import io
import array
import socket import socket
from unittest import TestCase from unittest import TestCase
@ -174,6 +175,20 @@ class BasicTest(TestCase):
self.assertTrue(sock.data.startswith(expected), '%r != %r' % self.assertTrue(sock.data.startswith(expected), '%r != %r' %
(sock.data[:len(expected)], expected)) (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): def test_chunked(self):
chunked_start = ( chunked_start = (
'HTTP/1.1 200 OK\r\n' 'HTTP/1.1 200 OK\r\n'

View File

@ -481,6 +481,7 @@ Nick Mathewson
Graham Matthews Graham Matthews
Dieter Maurer Dieter Maurer
Arnaud Mazin Arnaud Mazin
Kirk McDonald
Chris McDonough Chris McDonough
Greg McFarlane Greg McFarlane
Alan McIntyre Alan McIntyre