summaryrefslogtreecommitdiff
path: root/swiftclient/client.py
diff options
context:
space:
mode:
authorDavide Guerri <davide.guerri@hp.com>2013-11-25 10:42:56 +0000
committerDavide Guerri <davide.guerri@hp.com>2013-12-10 12:12:28 +0000
commit716b4e722c98396dc1477a04120eb0fedf388799 (patch)
treeab6e0ebde0c7b3972d72445f0a2dd6ec04751bcf /swiftclient/client.py
parent04e0cb27839cec474bce383d4364fd76dcb6e4b2 (diff)
downloadpython-swiftclient-716b4e722c98396dc1477a04120eb0fedf388799.tar.gz
Enable usage of proxies defined in environment (http(s)_proxy).
As far as proxies usage is concerned, keystone-client API and swift-client API behave differently because the former uses python Request library while the latter uses raw httplib. As a result, Keystone authentication honors environment variables http_proxy, https_proxy and no_proxy while Swift doesn't. This patch, which code is mainly borrowed from Python Requests, makes Swift data connections and Swift authentication connections behaving homogeneously. Change-Id: Ic8a0089c35c458d7ed96e572e22429014298fe4c
Diffstat (limited to 'swiftclient/client.py')
-rw-r--r--swiftclient/client.py10
1 files changed, 8 insertions, 2 deletions
diff --git a/swiftclient/client.py b/swiftclient/client.py
index 8dc4b71..edd0913 100644
--- a/swiftclient/client.py
+++ b/swiftclient/client.py
@@ -29,6 +29,7 @@ from httplib import HTTPException, HTTPConnection, HTTPSConnection
from time import sleep
from swiftclient.exceptions import ClientException, InvalidHeadersException
+from swiftclient.utils import get_environ_proxies
try:
from swiftclient.https_connection import HTTPSConnectionNoSSLComp
@@ -138,8 +139,13 @@ def http_connection(url, proxy=None, ssl_compression=True):
"""
url = encode_utf8(url)
parsed = urlparse(url)
- proxy_parsed = urlparse(proxy) if proxy else None
- host = proxy_parsed if proxy else parsed.netloc
+ if proxy:
+ proxy_parsed = urlparse(proxy)
+ else:
+ proxies = get_environ_proxies(parsed.netloc)
+ proxy = proxies.get(parsed.scheme, None)
+ proxy_parsed = urlparse(proxy) if proxy else None
+ host = proxy_parsed.netloc if proxy else parsed.netloc
if parsed.scheme == 'http':
conn = HTTPConnection(host)
elif parsed.scheme == 'https':