diff options
| author | Steve Martinelli <stevemar@ca.ibm.com> | 2015-09-11 00:46:03 -0500 |
|---|---|---|
| committer | Steve Martinelli <stevemar@ca.ibm.com> | 2015-10-10 11:48:07 -0400 |
| commit | 1f8b81462826284068b96ffce2648344c9e7c644 (patch) | |
| tree | 164260390cb8c43eb109a408aa55504495d85d48 /openstackclient/api | |
| parent | 4759a84703cabbbc2449281e1b34dbf43da9bad4 (diff) | |
| download | python-openstackclient-1f8b81462826284068b96ffce2648344c9e7c644.tar.gz | |
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
Diffstat (limited to 'openstackclient/api')
| -rw-r--r-- | openstackclient/api/object_store_v1.py | 66 |
1 files changed, 41 insertions, 25 deletions
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 |
