From 1f8b81462826284068b96ffce2648344c9e7c644 Mon Sep 17 00:00:00 2001 From: Steve Martinelli Date: Fri, 11 Sep 2015 00:46:03 -0500 Subject: Fix up object-store show commands 1) Change metadata to appear under a common 'properties' key, and use the utility to format them, this applied to object, account and container. 2) Clean up container and object output, which were setting the x-container-meta-owner property, but this is metadata only for the container, so it's pointless to have, removed it. 3) Container show was showing read/write ACLs and sync stuff, but these are not being returned by my swift by default, so I moved these to be checks, so we don't clutter the output. Change-Id: Ife7521fe9c2724035b06963c118bd6016ba2f5b5 --- openstackclient/api/object_store_v1.py | 66 +++++++++++++++++++++------------- 1 file changed, 41 insertions(+), 25 deletions(-) (limited to 'openstackclient/api') diff --git a/openstackclient/api/object_store_v1.py b/openstackclient/api/object_store_v1.py index ae03ab7d..b1c78d99 100644 --- a/openstackclient/api/object_store_v1.py +++ b/openstackclient/api/object_store_v1.py @@ -15,6 +15,7 @@ import io import os + import six from six.moves import urllib @@ -176,13 +177,24 @@ class APIv1(api.BaseAPI): 'x-container-object-count', None, ), - 'meta-owner': response.headers.get('x-container-meta-owner', None), - 'bytes_used': response.headers.get('x-container-bytes-used', None), - 'read_acl': response.headers.get('x-container-read', None), - 'write_acl': response.headers.get('x-container-write', None), - 'sync_to': response.headers.get('x-container-sync-to', None), - 'sync_key': response.headers.get('x-container-sync-key', None), + 'bytes_used': response.headers.get('x-container-bytes-used', None) } + + if 'x-container-read' in response.headers: + data['read_acl'] = response.headers.get('x-container-read', None) + if 'x-container-write' in response.headers: + data['write_acl'] = response.headers.get('x-container-write', None) + if 'x-container-sync-to' in response.headers: + data['sync_to'] = response.headers.get('x-container-sync-to', None) + if 'x-container-sync-key' in response.headers: + data['sync_key'] = response.headers.get('x-container-sync-key', + None) + + properties = self._get_properties(response.headers, + 'x-container-meta-') + if properties: + data['properties'] = properties + return data def container_unset( @@ -434,12 +446,12 @@ class APIv1(api.BaseAPI): response = self._request('HEAD', "%s/%s" % (urllib.parse.quote(container), urllib.parse.quote(object))) + data = { 'account': self._find_account_id(), 'container': container, 'object': object, 'content-type': response.headers.get('content-type', None), - 'meta-owner': response.headers.get('x-container-meta-owner', None), } if 'content-length' in response.headers: data['content-length'] = response.headers.get( @@ -455,19 +467,10 @@ class APIv1(api.BaseAPI): 'x-object-manifest', None, ) - for key, value in six.iteritems(response.headers): - if key.startswith('x-object-meta-'): - data[key[len('x-object-meta-'):].lower()] = value - elif key not in ( - 'content-type', - 'content-length', - 'last-modified', - 'etag', - 'date', - 'x-object-manifest', - 'x-container-meta-owner', - ): - data[key.lower()] = value + + properties = self._get_properties(response.headers, 'x-object-meta-') + if properties: + data['properties'] = properties return data @@ -495,12 +498,16 @@ class APIv1(api.BaseAPI): # catalog should be enough. response = self._request("HEAD", "") data = {} - for k, v in response.headers.iteritems(): - data[k] = v + + properties = self._get_properties(response.headers, 'x-account-meta-') + if properties: + data['properties'] = properties + # Map containers, bytes and objects a bit nicer - data['Containers'] = data.pop('x-account-container-count', None) - data['Objects'] = data.pop('x-account-object-count', None) - data['Bytes'] = data.pop('x-account-bytes-used', None) + data['Containers'] = response.headers.get('x-account-container-count', + None) + data['Objects'] = response.headers.get('x-account-object-count', None) + data['Bytes'] = response.headers.get('x-account-bytes-used', None) # Add in Account info too data['Account'] = self._find_account_id() return data @@ -549,3 +556,12 @@ class APIv1(api.BaseAPI): header_name = header_tag % k headers[header_name] = v return headers + + def _get_properties(self, headers, header_tag): + # Add in properties as a top level key, this is consistent with other + # OSC commands + properties = {} + for k, v in six.iteritems(headers): + if k.startswith(header_tag): + properties[k[len(header_tag):]] = v + return properties -- cgit v1.2.1