Merged revisions 75137 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k

................
  r75137 | antoine.pitrou | 2009-09-29 20:44:53 +0200 (mar., 29 sept. 2009) | 14 lines

  [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.
  ........
................
diff --git a/Lib/http/client.py b/Lib/http/client.py
index 2418340..42da984 100644
--- a/Lib/http/client.py
+++ b/Lib/http/client.py
@@ -726,10 +726,17 @@
             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 @@
         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'
diff --git a/Misc/ACKS b/Misc/ACKS
index 9a701ce..5ca0446 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -477,6 +477,7 @@
 Graham Matthews
 Dieter Maurer
 Arnaud Mazin
+Kirk McDonald
 Chris McDonough
 Greg McFarlane
 Alan McIntyre