summaryrefslogtreecommitdiff
path: root/swiftclient/service.py
diff options
context:
space:
mode:
Diffstat (limited to 'swiftclient/service.py')
-rw-r--r--swiftclient/service.py46
1 files changed, 28 insertions, 18 deletions
diff --git a/swiftclient/service.py b/swiftclient/service.py
index f204895..de30d50 100644
--- a/swiftclient/service.py
+++ b/swiftclient/service.py
@@ -44,7 +44,7 @@ from swiftclient.command_helpers import (
)
from swiftclient.utils import (
config_true_value, ReadableToIterable, LengthWrapper, EMPTY_ETAG,
- parse_api_response, report_traceback, n_groups
+ parse_api_response, report_traceback, n_groups, split_request_headers
)
from swiftclient.exceptions import ClientException
from swiftclient.multithreading import MultiThreadingManager
@@ -279,15 +279,11 @@ def split_headers(options, prefix=''):
reporting.
"""
headers = {}
- for item in options:
- split_item = item.split(':', 1)
- if len(split_item) == 2:
- headers[(prefix + split_item[0]).title()] = split_item[1].strip()
- else:
- raise SwiftError(
- "Metadata parameter %s must contain a ':'.\n%s"
- % (item, "Example: 'Color:Blue' or 'Size:Large'")
- )
+ try:
+ headers = split_request_headers(options, prefix)
+ except ValueError as e:
+ raise SwiftError(e)
+
return headers
@@ -467,7 +463,8 @@ class SwiftService(object):
performed by this call::
{
- 'human': False
+ 'human': False,
+ 'header': []
}
:returns: Either a single dictionary containing stats about an account
@@ -849,6 +846,7 @@ class SwiftService(object):
'long': False,
'prefix': None,
'delimiter': None,
+ 'header': []
}
:returns: A generator for returning the results of the list operation
@@ -884,10 +882,12 @@ class SwiftService(object):
def _list_account_job(conn, options, result_queue):
marker = ''
error = None
+ req_headers = split_headers(options.get('header', []))
try:
while True:
_, items = conn.get_account(
- marker=marker, prefix=options['prefix']
+ marker=marker, prefix=options['prefix'],
+ headers=req_headers
)
if not items:
@@ -943,11 +943,12 @@ class SwiftService(object):
def _list_container_job(conn, container, options, result_queue):
marker = options.get('marker', '')
error = None
+ req_headers = split_headers(options.get('header', []))
try:
while True:
_, items = conn.get_container(
container, marker=marker, prefix=options['prefix'],
- delimiter=options['delimiter']
+ delimiter=options['delimiter'], headers=req_headers
)
if not items:
@@ -2112,6 +2113,7 @@ class SwiftService(object):
'yes_all': False,
'leave_segments': False,
'prefix': None,
+ 'header': [],
}
:returns: A generator for returning the results of the delete
@@ -2250,6 +2252,8 @@ class SwiftService(object):
def _delete_object(self, conn, container, obj, options,
results_queue=None):
+ _headers = {}
+ _headers = split_headers(options.get('header', []))
res = {
'action': 'delete_object',
'container': container,
@@ -2261,7 +2265,8 @@ class SwiftService(object):
if not options['leave_segments']:
try:
- headers = conn.head_object(container, obj)
+ headers = conn.head_object(container, obj,
+ headers=_headers)
old_manifest = headers.get('x-object-manifest')
if config_true_value(headers.get('x-static-large-object')):
query_string = 'multipart-manifest=delete'
@@ -2270,7 +2275,9 @@ class SwiftService(object):
raise
results_dict = {}
- conn.delete_object(container, obj, query_string=query_string,
+ conn.delete_object(container, obj,
+ headers=_headers,
+ query_string=query_string,
response_dict=results_dict)
if old_manifest:
@@ -2322,10 +2329,13 @@ class SwiftService(object):
return res
@staticmethod
- def _delete_empty_container(conn, container):
+ def _delete_empty_container(conn, container, options):
results_dict = {}
+ _headers = {}
+ _headers = split_headers(options.get('header', []))
try:
- conn.delete_container(container, response_dict=results_dict)
+ conn.delete_container(container, headers=_headers,
+ response_dict=results_dict)
res = {'success': True}
except Exception as err:
traceback, err_time = report_traceback()
@@ -2363,7 +2373,7 @@ class SwiftService(object):
return
con_del = self.thread_manager.container_pool.submit(
- self._delete_empty_container, container
+ self._delete_empty_container, container, options
)
con_del_res = get_future_result(con_del)