summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-08-02 19:23:23 +0000
committerGerrit Code Review <review@openstack.org>2013-08-02 19:23:23 +0000
commitc626c2a87ead1c9cf8ee4b5b454afaa1aea7a68e (patch)
tree150bf58388f6baf00f3c90be882312a6882e0033
parent256978a0eea5238bb1f1896a1108616d3b3ed292 (diff)
parentd34f12614820416aebe5e91eab9726b556d1f973 (diff)
downloadpython-swiftclient-c626c2a87ead1c9cf8ee4b5b454afaa1aea7a68e.tar.gz
Merge "Added headers argument support to get_object()"
-rw-r--r--swiftclient/client.py11
-rw-r--r--tests/test_swiftclient.py20
2 files changed, 27 insertions, 4 deletions
diff --git a/swiftclient/client.py b/swiftclient/client.py
index e50e674..eef5b6c 100644
--- a/swiftclient/client.py
+++ b/swiftclient/client.py
@@ -691,7 +691,7 @@ def delete_container(url, token, container, http_conn=None,
def get_object(url, token, container, name, http_conn=None,
resp_chunk_size=None, query_string=None,
- response_dict=None):
+ response_dict=None, headers=None):
"""
Get an object
@@ -708,6 +708,8 @@ def get_object(url, token, container, name, http_conn=None,
:param query_string: if set will be appended with '?' to generated path
:param response_dict: an optional dictionary into which to place
the response - status, reason and headers
+ :param headers: an optional dictionary with additional headers to include
+ in the request
:returns: a tuple of (response headers, the object's contents) The response
headers will be a dict and all header names will be lowercase.
:raises ClientException: HTTP GET request failed
@@ -720,7 +722,8 @@ def get_object(url, token, container, name, http_conn=None,
if query_string:
path += '?' + query_string
method = 'GET'
- headers = {'X-Auth-Token': token}
+ headers = headers.copy() if headers else {}
+ headers['X-Auth-Token'] = token
conn.request(method, path, '', headers)
resp = conn.getresponse()
@@ -1178,12 +1181,12 @@ class Connection(object):
return self._retry(None, head_object, container, obj)
def get_object(self, container, obj, resp_chunk_size=None,
- query_string=None, response_dict=None):
+ query_string=None, response_dict=None, headers=None):
"""Wrapper for :func:`get_object`"""
return self._retry(None, get_object, container, obj,
resp_chunk_size=resp_chunk_size,
query_string=query_string,
- response_dict=response_dict)
+ response_dict=response_dict, headers=headers)
def put_object(self, container, obj, contents, content_length=None,
etag=None, chunk_size=None, content_type=None,
diff --git a/tests/test_swiftclient.py b/tests/test_swiftclient.py
index 7a10d34..ec052e4 100644
--- a/tests/test_swiftclient.py
+++ b/tests/test_swiftclient.py
@@ -520,6 +520,26 @@ class TestGetObject(MockHttpTest):
c.get_object('http://www.test.com', 'asdf', 'asdf', 'asdf',
query_string="hello=20")
+ def test_request_headers(self):
+ request_args = {}
+
+ def fake_request(method, url, body=None, headers=None):
+ request_args['method'] = method
+ request_args['url'] = url
+ request_args['body'] = body
+ request_args['headers'] = headers
+ return
+ conn = self.fake_http_connection(200)('http://www.test.com/')
+ conn[1].request = fake_request
+ headers = {'Range': 'bytes=1-2'}
+ c.get_object('url_is_irrelevant', 'TOKEN', 'container', 'object',
+ http_conn=conn, headers=headers)
+ self.assertFalse(request_args['headers'] is None,
+ "No headers in the request")
+ self.assertTrue('Range' in request_args['headers'],
+ "No Range header in the request")
+ self.assertEquals(request_args['headers']['Range'], 'bytes=1-2')
+
class TestHeadObject(MockHttpTest):