From bbeed736c1b31a65f28f9f390a51fbe6f895a56b Mon Sep 17 00:00:00 2001 From: gholt Date: Fri, 3 Jun 2011 02:39:31 +0000 Subject: [PATCH] st: resync with client.py changes --- bin/st | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/bin/st b/bin/st index 88526becea..c5b22b95ef 100755 --- a/bin/st +++ b/bin/st @@ -150,7 +150,7 @@ class ClientException(Exception): return b and '%s: %s' % (a, b) or a -def http_connection(url): +def http_connection(url, proxy=None): """ Make an HTTPConnection or HTTPSConnection @@ -158,14 +158,16 @@ def http_connection(url): :returns: tuple of (parsed url, connection object) :raises ClientException: Unable to handle protocol scheme """ - parsed = urlparse(url) + parsed = urlparse(proxy or url) if parsed.scheme == 'http': conn = HTTPConnection(parsed.netloc) elif parsed.scheme == 'https': conn = HTTPSConnection(parsed.netloc) else: raise ClientException('Cannot handle protocol scheme %s for url %s' % - (parsed.scheme, repr(url))) + (parsed.scheme, repr(proxy or url))) + if proxy: + parsed = urlparse(url) return parsed, conn @@ -580,7 +582,7 @@ def head_object(url, token, container, name, http_conn=None): def put_object(url, token=None, container=None, name=None, contents=None, content_length=None, etag=None, chunk_size=65536, - content_type=None, headers=None, http_conn=None): + content_type=None, headers=None, http_conn=None, proxy=None): """ Put an object @@ -603,12 +605,14 @@ def put_object(url, token=None, container=None, name=None, contents=None, if http_conn: parsed, conn = http_conn else: - parsed, conn = http_connection(url) + parsed, conn = http_connection(url, proxy=proxy) path = parsed.path if container: path = '%s/%s' % (path.rstrip('/'), quote(container)) if name: path = '%s/%s' % (path.rstrip('/'), quote(name)) + if proxy: + path = parsed.scheme + '://' + parsed.netloc + path if headers: headers = dict(headers) else: @@ -619,6 +623,10 @@ def put_object(url, token=None, container=None, name=None, contents=None, headers['ETag'] = etag.strip('"') if content_length is not None: headers['Content-Length'] = str(content_length) + else: + for n, v in headers.iteritems(): + if n.lower() == 'content-length': + content_length = int(v) if content_type is not None: headers['Content-Type'] = content_type if not contents: @@ -685,7 +693,7 @@ def post_object(url, token, container, name, headers, http_conn=None): def delete_object(url, token=None, container=None, name=None, http_conn=None, - headers=None): + headers=None, proxy=None): """ Delete object @@ -700,7 +708,7 @@ def delete_object(url, token=None, container=None, name=None, http_conn=None, if http_conn: parsed, conn = http_conn else: - parsed, conn = http_connection(url) + parsed, conn = http_connection(url, proxy=proxy) path = parsed.path if container: path = '%s/%s' % (path.rstrip('/'), quote(container)) @@ -712,6 +720,8 @@ def delete_object(url, token=None, container=None, name=None, http_conn=None, headers = {} if token: headers['X-Auth-Token'] = token + if proxy: + path = parsed.scheme + '://' + parsed.netloc + path conn.request('DELETE', path, '', headers) resp = conn.getresponse() resp.read()