py3 connection class did not initialize .proxy_info attribute
https://github.com/httplib2/httplib2/pull/97
diff --git a/python3/httplib2/__init__.py b/python3/httplib2/__init__.py
index 04f9c5e..deb7168 100644
--- a/python3/httplib2/__init__.py
+++ b/python3/httplib2/__init__.py
@@ -886,11 +886,9 @@
http.client.HTTPConnection.__init__(self, host, port=port,
timeout=timeout)
- if proxy_info:
- if isinstance(proxy_info, ProxyInfo):
- self.proxy_info = proxy_info
- else:
- self.proxy_info = proxy_info('http')
+ self.proxy_info = proxy_info
+ if proxy_info and not isinstance(proxy_info, ProxyInfo):
+ self.proxy_info = proxy_info('http')
def connect(self):
"""Connect to the host and port specified in __init__."""
@@ -967,11 +965,9 @@
self.disable_ssl_certificate_validation = disable_ssl_certificate_validation
self.ca_certs = ca_certs if ca_certs else CA_CERTS
- if proxy_info:
- if isinstance(proxy_info, ProxyInfo):
- self.proxy_info = proxy_info
- else:
- self.proxy_info = proxy_info('https')
+ self.proxy_info = proxy_info
+ if proxy_info and not isinstance(proxy_info, ProxyInfo):
+ self.proxy_info = proxy_info('https')
context = _build_ssl_context(self.disable_ssl_certificate_validation, self.ca_certs, cert_file, key_file)
super(HTTPSConnectionWithTimeout, self).__init__(host, port=port, key_file=key_file, cert_file=cert_file,
diff --git a/python3/httplib2test.py b/python3/httplib2test.py
index a0dca80..a4afae9 100755
--- a/python3/httplib2test.py
+++ b/python3/httplib2test.py
@@ -1630,5 +1630,11 @@
pi = httplib2.ProxyInfo(httplib2.socks.PROXY_TYPE_HTTP, 'localhost', 1234, proxy_headers = headers)
self.assertEqual(pi.proxy_headers, headers)
+ # regression: ensure that httplib2.HTTPConnectionWithTimeout initializes when proxy_info is not supplied
+ def test_proxy_init(self):
+ connection = httplib2.HTTPConnectionWithTimeout('www.google.com', 80)
+ connection.request('GET', '/')
+ connection.close()
+
if __name__ == '__main__':
unittest.main()
diff --git a/tests/test_other.py b/tests/test_other.py
index 63788c6..61b0d46 100644
--- a/tests/test_other.py
+++ b/tests/test_other.py
@@ -1,4 +1,5 @@
import httplib2
+import mock
import os
import pickle
import pytest
@@ -165,3 +166,15 @@
assert False, 'should get the address family right for IPv6'
except socket.error:
pass
+
+
+@pytest.mark.parametrize('conn_type', (httplib2.HTTPConnectionWithTimeout, httplib2.HTTPSConnectionWithTimeout))
+def test_connection_proxy_info_attribute_error(conn_type):
+ # HTTPConnectionWithTimeout did not initialize its .proxy_info attribute
+ # https://github.com/httplib2/httplib2/pull/97
+ # Thanks to Joseph Ryan https://github.com/germanjoey
+ conn = conn_type('no-such-hostname.', 80)
+ # TODO: replace mock with dummy local server
+ with tests.assert_raises(socket.gaierror):
+ with mock.patch('socket.socket.connect', side_effect=socket.gaierror):
+ conn.request('GET', '/')