diff options
| author | Dean Troyer <dtroyer@gmail.com> | 2014-09-18 00:54:52 -0500 |
|---|---|---|
| committer | Steve Martinelli <stevemar@ca.ibm.com> | 2014-10-01 13:50:13 -0400 |
| commit | 31018bf7c2c57c530d55ed1dd90b9b65d489d557 (patch) | |
| tree | 79f991b2c0b6c54c54b97c54cdf6db00a904cf86 /openstackclient/object/v1/lib/object.py | |
| parent | e3b9b9658805f274283a498ed82014dce3833fe3 (diff) | |
| download | python-openstackclient-31018bf7c2c57c530d55ed1dd90b9b65d489d557.tar.gz | |
Move object-store commands to low-level API
api.object_store.APIv1 now contains the formerly top-level functions
implementing the object-store REST client. This replaces the old-style
ObjectClientv1 that is no longer necessary.
Change-Id: I7d8fea326b214481e7d6b24119bd41777c6aa968
Diffstat (limited to 'openstackclient/object/v1/lib/object.py')
| -rw-r--r-- | openstackclient/object/v1/lib/object.py | 221 |
1 files changed, 0 insertions, 221 deletions
diff --git a/openstackclient/object/v1/lib/object.py b/openstackclient/object/v1/lib/object.py deleted file mode 100644 index 7a23fc76..00000000 --- a/openstackclient/object/v1/lib/object.py +++ /dev/null @@ -1,221 +0,0 @@ -# Copyright 2010-2012 OpenStack Foundation -# Copyright 2013 Nebula Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. -# - -"""Object v1 API library""" - -import os - -import six - -try: - from urllib.parse import urlparse # noqa -except ImportError: - from urlparse import urlparse # noqa - - -def create_object( - session, - url, - container, - object, -): - """Create an object, upload it to a container - - :param session: an authenticated keystoneclient.session.Session object - :param url: endpoint - :param container: name of container to store object - :param object: local path to object - :returns: dict of returned headers - """ - - full_url = "%s/%s/%s" % (url, container, object) - response = session.put(full_url, data=open(object)) - url_parts = urlparse(url) - data = { - 'account': url_parts.path.split('/')[-1], - 'container': container, - 'object': object, - 'x-trans-id': response.headers.get('X-Trans-Id', None), - 'etag': response.headers.get('Etag', None), - } - - return data - - -def delete_object( - session, - url, - container, - object, -): - """Delete an object stored in a container - - :param session: an authenticated keystoneclient.session.Session object - :param url: endpoint - :param container: name of container that stores object - :param container: name of object to delete - """ - - session.delete("%s/%s/%s" % (url, container, object)) - - -def list_objects( - session, - url, - container, - marker=None, - limit=None, - end_marker=None, - delimiter=None, - prefix=None, - path=None, - full_listing=False, -): - """Get objects in a container - - :param session: an authenticated keystoneclient.session.Session object - :param url: endpoint - :param container: container name to get a listing for - :param marker: marker query - :param limit: limit query - :param end_marker: marker query - :param delimiter: string to delimit the queries on - :param prefix: prefix query - :param path: path query (equivalent: "delimiter=/" and "prefix=path/") - :param full_listing: if True, return a full listing, else returns a max - of 10000 listings - :returns: a tuple of (response headers, a list of objects) The response - headers will be a dict and all header names will be lowercase. - """ - - if full_listing: - data = listing = list_objects( - session, - url, - container, - marker, - limit, - end_marker, - delimiter, - prefix, - path, - ) - while listing: - if delimiter: - marker = listing[-1].get('name', listing[-1].get('subdir')) - else: - marker = listing[-1]['name'] - listing = list_objects( - session, - url, - container, - marker, - limit, - end_marker, - delimiter, - prefix, - path, - ) - if listing: - data.extend(listing) - return data - - params = { - 'format': 'json', - } - if marker: - params['marker'] = marker - if limit: - params['limit'] = limit - if end_marker: - params['end_marker'] = end_marker - if delimiter: - params['delimiter'] = delimiter - if prefix: - params['prefix'] = prefix - if path: - params['path'] = path - requrl = "%s/%s" % (url, container) - return session.get(requrl, params=params).json() - - -def save_object( - session, - url, - container, - obj, - file=None -): - """Save an object stored in a container - - :param session: an authenticated keystoneclient.session.Session object - :param url: endpoint - :param container: name of container that stores object - :param object: name of object to save - :param file: local name of object - """ - - if not file: - file = obj - - response = session.get("%s/%s/%s" % (url, container, obj), stream=True) - if response.status_code == 200: - if not os.path.exists(os.path.dirname(file)): - os.makedirs(os.path.dirname(file)) - with open(file, 'wb') as f: - for chunk in response.iter_content(): - f.write(chunk) - - -def show_object( - session, - url, - container, - obj, -): - """Get object details - - :param session: an authenticated keystoneclient.session.Session object - :param url: endpoint - :param container: container name to get a listing for - :returns: dict of object properties - """ - - response = session.head("%s/%s/%s" % (url, container, obj)) - data = { - 'account': response.headers.get('x-container-meta-owner', None), - 'container': container, - 'object': obj, - 'content-type': response.headers.get('content-type', None), - } - if 'content-length' in response.headers: - data['content-length'] = response.headers.get('content-length', None) - if 'last-modified' in response.headers: - data['last-modified'] = response.headers.get('last-modified', None) - if 'etag' in response.headers: - data['etag'] = response.headers.get('etag', None) - if 'x-object-manifest' in response.headers: - data['x-object-manifest'] = response.headers.get( - '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 - - return data |
