diff options
Diffstat (limited to 'swiftclient/client.py')
-rw-r--r-- | swiftclient/client.py | 38 |
1 files changed, 32 insertions, 6 deletions
diff --git a/swiftclient/client.py b/swiftclient/client.py index afd85f0..04a539c 100644 --- a/swiftclient/client.py +++ b/swiftclient/client.py @@ -28,6 +28,10 @@ from urlparse import urlparse, urlunparse from httplib import HTTPException, HTTPConnection, HTTPSConnection from time import sleep +try: + from swiftclient.https_connection import HTTPSConnectionNoSSLComp +except ImportError: + HTTPSConnectionNoSSLComp = HTTPSConnection logger = logging.getLogger("swiftclient") @@ -141,23 +145,32 @@ class ClientException(Exception): return b and '%s: %s' % (a, b) or a -def http_connection(url, proxy=None): +def http_connection(url, proxy=None, ssl_compression=True): """ Make an HTTPConnection or HTTPSConnection :param url: url to connect to :param proxy: proxy to connect through, if any; None by default; str of the format 'http://127.0.0.1:8888' to set one + :param ssl_compression: Whether to enable compression at the SSL layer. + If set to 'False' and the pyOpenSSL library is + present an attempt to disable SSL compression + will be made. This may provide a performance + increase for https upload/download operations. :returns: tuple of (parsed url, connection object) :raises ClientException: Unable to handle protocol scheme """ url = encode_utf8(url) parsed = urlparse(url) proxy_parsed = urlparse(proxy) if proxy else None + host = proxy_parsed if proxy else parsed.netloc if parsed.scheme == 'http': - conn = HTTPConnection((proxy_parsed if proxy else parsed).netloc) + conn = HTTPConnection(host) elif parsed.scheme == 'https': - conn = HTTPSConnection((proxy_parsed if proxy else parsed).netloc) + if ssl_compression is True: + conn = HTTPSConnection(host) + else: + conn = HTTPSConnectionNoSSLComp(host) else: raise ClientException('Cannot handle protocol scheme %s for url %s' % (parsed.scheme, repr(url))) @@ -181,7 +194,12 @@ def http_connection(url, proxy=None): return request_escaped conn.request = request_wrapper(conn.request) if proxy: - conn._set_tunnel(parsed.hostname, parsed.port) + try: + # python 2.6 method + conn._set_tunnel(parsed.hostname, parsed.port) + except AttributeError: + # python 2.7 method + conn.set_tunnel(parsed.hostname, parsed.port) return parsed, conn @@ -956,7 +974,8 @@ class Connection(object): def __init__(self, authurl=None, user=None, key=None, retries=5, preauthurl=None, preauthtoken=None, snet=False, starting_backoff=1, tenant_name=None, os_options=None, - auth_version="1", cacert=None, insecure=False): + auth_version="1", cacert=None, insecure=False, + ssl_compression=True): """ :param authurl: authentication URL :param user: user name to authenticate as @@ -975,6 +994,11 @@ class Connection(object): tenant_name, object_storage_url, region_name :param insecure: Allow to access insecure keystone server. The keystone's certificate will not be verified. + :param ssl_compression: Whether to enable compression at the SSL layer. + If set to 'False' and the pyOpenSSL library is + present an attempt to disable SSL compression + will be made. This may provide a performance + increase for https upload/download operations. """ self.authurl = authurl self.user = user @@ -992,6 +1016,7 @@ class Connection(object): self.os_options['tenant_name'] = tenant_name self.cacert = cacert self.insecure = insecure + self.ssl_compression = ssl_compression def get_auth(self): return get_auth(self.authurl, @@ -1004,7 +1029,8 @@ class Connection(object): insecure=self.insecure) def http_connection(self): - return http_connection(self.url) + return http_connection(self.url, + ssl_compression=self.ssl_compression) def _retry(self, reset_func, func, *args, **kwargs): self.attempts = 0 |