From 80573bb90200423a6d1760f87bc9e05b129bd09a Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sat, 16 May 2015 18:58:41 +0300 Subject: Issue #15267: HTTPConnection.request() now is compatibile with old-style classes (such as TemporaryFile). Original patch by Atsuo Ishimoto. --- Lib/httplib.py | 2 +- Lib/test/test_httplib.py | 17 +++++++++++++++++ Misc/NEWS | 3 +++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/Lib/httplib.py b/Lib/httplib.py index 9f1e088..30fc525 100644 --- a/Lib/httplib.py +++ b/Lib/httplib.py @@ -1063,7 +1063,7 @@ class HTTPConnection: elif body is not None: try: thelen = str(len(body)) - except TypeError: + except (TypeError, AttributeError): # If this is a file-like object, try to # fstat its file descriptor try: diff --git a/Lib/test/test_httplib.py b/Lib/test/test_httplib.py index fc7c571..dc986a9 100644 --- a/Lib/test/test_httplib.py +++ b/Lib/test/test_httplib.py @@ -5,6 +5,7 @@ import StringIO import socket import errno import os +import tempfile import unittest TestCase = unittest.TestCase @@ -399,6 +400,22 @@ class BasicTest(TestCase): conn.sock = sock conn.request('GET', '/foo', body) self.assertTrue(sock.data.startswith(expected)) + self.assertIn('def test_send_file', sock.data) + + def test_send_tempfile(self): + expected = ('GET /foo HTTP/1.1\r\nHost: example.com\r\n' + 'Accept-Encoding: identity\r\nContent-Length: 9\r\n\r\n' + 'fake\ndata') + + with tempfile.TemporaryFile() as body: + body.write('fake\ndata') + body.seek(0) + + conn = httplib.HTTPConnection('example.com') + sock = FakeSocket(body) + conn.sock = sock + conn.request('GET', '/foo', body) + self.assertEqual(sock.data, expected) def test_send(self): expected = 'this is a test this is only a test' diff --git a/Misc/NEWS b/Misc/NEWS index 5df7c9b..c30fd14 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -13,6 +13,9 @@ Core and Builtins Library ------- +- Issue #15267: HTTPConnection.request() now is compatibile with old-style + classes (such as TemporaryFile). Original patch by Atsuo Ishimoto. + - Issue #20014: array.array() now accepts unicode typecodes. Based on patch by Vajrasky Kok. -- cgit v0.12