summaryrefslogtreecommitdiff
path: root/openstackclient/object/v1/lib/object.py
diff options
context:
space:
mode:
authorDean Troyer <dtroyer@gmail.com>2014-09-18 00:54:52 -0500
committerSteve Martinelli <stevemar@ca.ibm.com>2014-10-01 13:50:13 -0400
commit31018bf7c2c57c530d55ed1dd90b9b65d489d557 (patch)
tree79f991b2c0b6c54c54b97c54cdf6db00a904cf86 /openstackclient/object/v1/lib/object.py
parente3b9b9658805f274283a498ed82014dce3833fe3 (diff)
downloadpython-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.py221
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