diff options
| author | Jenkins <jenkins@review.openstack.org> | 2014-11-05 19:06:11 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2014-11-05 19:06:11 +0000 |
| commit | 695dbc910d2068aff89a68d6f5aa088cc835766e (patch) | |
| tree | 61a23fa5eee4ca0bebf213b763828658dd6610c5 | |
| parent | cfe06235207d50d6d36b3d8b3e87608412038c80 (diff) | |
| parent | 052904ba32f6e6075b023065bff684042c640c6a (diff) | |
| download | python-glanceclient-695dbc910d2068aff89a68d6f5aa088cc835766e.tar.gz | |
Merge "Don't replace the https handler in the poolmanager"0.14.2
| -rw-r--r-- | glanceclient/common/http.py | 3 | ||||
| -rw-r--r-- | glanceclient/common/https.py | 16 | ||||
| -rw-r--r-- | tests/test_ssl.py | 12 |
3 files changed, 27 insertions, 4 deletions
diff --git a/glanceclient/common/http.py b/glanceclient/common/http.py index ad9da20..028946d 100644 --- a/glanceclient/common/http.py +++ b/glanceclient/common/http.py @@ -70,7 +70,8 @@ class HTTPClient(object): compression = kwargs.get('ssl_compression', True) if not compression: - self.session.mount("https://", https.HTTPSAdapter()) + self.session.mount("glance+https://", https.HTTPSAdapter()) + self.endpoint = 'glance+' + self.endpoint self.session.verify = ( kwargs.get('cacert', requests.certs.where()), diff --git a/glanceclient/common/https.py b/glanceclient/common/https.py index 4f0e6f5..6baa6af 100644 --- a/glanceclient/common/https.py +++ b/glanceclient/common/https.py @@ -50,6 +50,7 @@ except ImportError: from glanceclient import exc +from glanceclient.openstack.common import strutils def to_bytes(s): @@ -72,9 +73,16 @@ class HTTPSAdapter(adapters.HTTPAdapter): def __init__(self, *args, **kwargs): # NOTE(flaper87): This line forces poolmanager to use # glanceclient HTTPSConnection - poolmanager.pool_classes_by_scheme["https"] = HTTPSConnectionPool + classes_by_scheme = poolmanager.pool_classes_by_scheme + classes_by_scheme["glance+https"] = HTTPSConnectionPool super(HTTPSAdapter, self).__init__(*args, **kwargs) + def request_url(self, request, proxies): + # NOTE(flaper87): Make sure the url is encoded, otherwise + # python's standard httplib will fail with a TypeError. + url = super(HTTPSAdapter, self).request_url(request, proxies) + return strutils.safe_encode(url) + def cert_verify(self, conn, url, verify, cert): super(HTTPSAdapter, self).cert_verify(conn, url, verify, cert) conn.ca_certs = verify[0] @@ -93,7 +101,7 @@ class HTTPSConnectionPool(connectionpool.HTTPSConnectionPool): be used just when the user sets --no-ssl-compression. """ - scheme = 'https' + scheme = 'glance+https' def _new_conn(self): self.num_connections += 1 @@ -150,6 +158,10 @@ class VerifiedHTTPSConnection(HTTPSConnection): self.cert_file = cert_file self.timeout = timeout self.insecure = insecure + # NOTE(flaper87): `is_verified` is needed for + # requests' urllib3. If insecure is True then + # the request is not `verified`, hence `not insecure` + self.is_verified = not insecure self.ssl_compression = ssl_compression self.cacert = None if cacert is None else str(cacert) self.set_context() diff --git a/tests/test_ssl.py b/tests/test_ssl.py index ecbccfa..013d18f 100644 --- a/tests/test_ssl.py +++ b/tests/test_ssl.py @@ -39,12 +39,22 @@ class TestRequestsIntegration(testtools.TestCase): adapter = client.session.adapters.get("https://") self.assertFalse(isinstance(adapter, https.HTTPSAdapter)) + adapter = client.session.adapters.get("glance+https://") + self.assertFalse(isinstance(adapter, https.HTTPSAdapter)) + + def test_custom_https_adapter(self): client = http.HTTPClient("https://localhost", ssl_compression=False) + self.assertNotEqual(https.HTTPSConnectionPool, + poolmanager.pool_classes_by_scheme["https"]) + self.assertEqual(https.HTTPSConnectionPool, - poolmanager.pool_classes_by_scheme["https"]) + poolmanager.pool_classes_by_scheme["glance+https"]) adapter = client.session.adapters.get("https://") + self.assertFalse(isinstance(adapter, https.HTTPSAdapter)) + + adapter = client.session.adapters.get("glance+https://") self.assertTrue(isinstance(adapter, https.HTTPSAdapter)) |
