st: resync with client.py changes

This commit is contained in:
gholt
2011-06-03 02:39:31 +00:00
parent 7ac6baf6d1
commit bbeed736c1

24
bin/st
View File

@@ -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()