summaryrefslogtreecommitdiff
path: root/swiftclient/client.py
diff options
context:
space:
mode:
authorClay Gerrard <clay.gerrard@gmail.com>2019-10-29 09:59:03 -0500
committerTim Burke <tim.burke@gmail.com>2020-04-08 13:07:26 -0700
commit78edffa46c591fdc53f253b343e1ea144e24089d (patch)
tree21205561c27782986e87d60ed1e12176b46d7129 /swiftclient/client.py
parent02e8f4f228c006927fe87f8a350c281b9cfccd98 (diff)
downloadpython-swiftclient-78edffa46c591fdc53f253b343e1ea144e24089d.tar.gz
object versioning features
* add --versions to list * add --versions to delete * add --version-id to stat * add --version-id to delete * add --version-id to download Change-Id: I89802064921778fee7efe57c7d60c976cdde3a27
Diffstat (limited to 'swiftclient/client.py')
-rw-r--r--swiftclient/client.py24
1 files changed, 16 insertions, 8 deletions
diff --git a/swiftclient/client.py b/swiftclient/client.py
index 448bb46..449b6cd 100644
--- a/swiftclient/client.py
+++ b/swiftclient/client.py
@@ -921,7 +921,7 @@ def post_account(url, token, headers, http_conn=None, response_dict=None,
def get_container(url, token, container, marker=None, limit=None,
prefix=None, delimiter=None, end_marker=None,
- path=None, http_conn=None,
+ version_marker=None, path=None, http_conn=None,
full_listing=False, service_token=None, headers=None,
query_string=None):
"""
@@ -935,6 +935,7 @@ def get_container(url, token, container, marker=None, limit=None,
:param prefix: prefix query
:param delimiter: string to delimit the queries on
:param end_marker: marker query
+ :param version_marker: version marker query
:param path: path query (equivalent: "delimiter=/" and "prefix=path/")
:param http_conn: a tuple of (parsed url, HTTPConnection object),
(If None, it will create the conn object)
@@ -951,17 +952,20 @@ def get_container(url, token, container, marker=None, limit=None,
http_conn = http_connection(url)
if full_listing:
rv = get_container(url, token, container, marker, limit, prefix,
- delimiter, end_marker, path, http_conn,
- service_token=service_token, headers=headers)
+ delimiter, end_marker, version_marker, path=path,
+ http_conn=http_conn, service_token=service_token,
+ headers=headers)
listing = rv[1]
while listing:
if not delimiter:
marker = listing[-1]['name']
else:
marker = listing[-1].get('name', listing[-1].get('subdir'))
+ version_marker = listing[-1].get('version_id')
listing = get_container(url, token, container, marker, limit,
- prefix, delimiter, end_marker, path,
- http_conn, service_token=service_token,
+ prefix, delimiter, end_marker,
+ version_marker, path, http_conn,
+ service_token=service_token,
headers=headers)[1]
if listing:
rv[1].extend(listing)
@@ -979,6 +983,8 @@ def get_container(url, token, container, marker=None, limit=None,
qs += '&delimiter=%s' % quote(delimiter)
if end_marker:
qs += '&end_marker=%s' % quote(end_marker)
+ if version_marker:
+ qs += '&version_marker=%s' % quote(version_marker)
if path:
qs += '&path=%s' % quote(path)
if query_string:
@@ -1816,15 +1822,17 @@ class Connection(object):
return self._retry(None, head_container, container, headers=headers)
def get_container(self, container, marker=None, limit=None, prefix=None,
- delimiter=None, end_marker=None, path=None,
- full_listing=False, headers=None, query_string=None):
+ delimiter=None, end_marker=None, version_marker=None,
+ path=None, full_listing=False, headers=None,
+ query_string=None):
"""Wrapper for :func:`get_container`"""
# TODO(unknown): With full_listing=True this will restart the entire
# listing with each retry. Need to make a better version that just
# retries where it left off.
return self._retry(None, get_container, container, marker=marker,
limit=limit, prefix=prefix, delimiter=delimiter,
- end_marker=end_marker, path=path,
+ end_marker=end_marker,
+ version_marker=version_marker, path=path,
full_listing=full_listing, headers=headers,
query_string=query_string)