summaryrefslogtreecommitdiff
path: root/openstackclient/object
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
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')
-rw-r--r--openstackclient/object/client.py22
-rw-r--r--openstackclient/object/v1/container.py29
-rw-r--r--openstackclient/object/v1/lib/container.py170
-rw-r--r--openstackclient/object/v1/lib/object.py221
-rw-r--r--openstackclient/object/v1/object.py42
5 files changed, 30 insertions, 454 deletions
diff --git a/openstackclient/object/client.py b/openstackclient/object/client.py
index b81ffaaf..887aa85b 100644
--- a/openstackclient/object/client.py
+++ b/openstackclient/object/client.py
@@ -17,6 +17,7 @@
import logging
+from openstackclient.api import object_store_v1
from openstackclient.common import utils
LOG = logging.getLogger(__name__)
@@ -30,7 +31,7 @@ API_VERSIONS = {
def make_client(instance):
- """Returns an object service client."""
+ """Returns an object-store API client."""
object_client = utils.get_client_class(
API_NAME,
@@ -42,9 +43,11 @@ def make_client(instance):
endpoint = instance._url
else:
endpoint = instance.get_endpoint_for_service_type("object-store")
- client = object_client(
+
+ client = object_store_v1.APIv1(
+ session=instance.session,
+ service_type='object-store',
endpoint=endpoint,
- token=instance._token,
)
return client
@@ -61,16 +64,3 @@ def build_option_parser(parser):
DEFAULT_OBJECT_API_VERSION +
' (Env: OS_OBJECT_API_VERSION)')
return parser
-
-
-class ObjectClientv1(object):
-
- def __init__(
- self,
- endpoint_type='publicURL',
- endpoint=None,
- token=None,
- ):
- self.endpoint_type = endpoint_type
- self.endpoint = endpoint
- self.token = token
diff --git a/openstackclient/object/v1/container.py b/openstackclient/object/v1/container.py
index 9d55381c..ead3df45 100644
--- a/openstackclient/object/v1/container.py
+++ b/openstackclient/object/v1/container.py
@@ -24,7 +24,6 @@ from cliff import lister
from cliff import show
from openstackclient.common import utils
-from openstackclient.object.v1.lib import container as lib_container
class CreateContainer(lister.Lister):
@@ -47,10 +46,8 @@ class CreateContainer(lister.Lister):
results = []
for container in parsed_args.containers:
- data = lib_container.create_container(
- self.app.client_manager.session,
- self.app.client_manager.object_store.endpoint,
- container,
+ data = self.app.client_manager.object_store.container_create(
+ container=container,
)
results.append(data)
@@ -81,10 +78,8 @@ class DeleteContainer(command.Command):
self.log.debug('take_action(%s)', parsed_args)
for container in parsed_args.containers:
- lib_container.delete_container(
- self.app.client_manager.session,
- self.app.client_manager.object_store.endpoint,
- container,
+ self.app.client_manager.object_store.container_delete(
+ container=container,
)
@@ -150,9 +145,7 @@ class ListContainer(lister.Lister):
if parsed_args.all:
kwargs['full_listing'] = True
- data = lib_container.list_containers(
- self.app.client_manager.session,
- self.app.client_manager.object_store.endpoint,
+ data = self.app.client_manager.object_store.container_list(
**kwargs
)
@@ -180,10 +173,8 @@ class SaveContainer(command.Command):
def take_action(self, parsed_args):
self.log.debug("take_action(%s)", parsed_args)
- lib_container.save_container(
- self.app.client_manager.session,
- self.app.client_manager.object_store.endpoint,
- parsed_args.container
+ self.app.client_manager.object_store.container_save(
+ container=parsed_args.container,
)
@@ -204,10 +195,8 @@ class ShowContainer(show.ShowOne):
def take_action(self, parsed_args):
self.log.debug('take_action(%s)', parsed_args)
- data = lib_container.show_container(
- self.app.client_manager.session,
- self.app.client_manager.object_store.endpoint,
- parsed_args.container,
+ data = self.app.client_manager.object_store.container_show(
+ container=parsed_args.container,
)
return zip(*sorted(six.iteritems(data)))
diff --git a/openstackclient/object/v1/lib/container.py b/openstackclient/object/v1/lib/container.py
deleted file mode 100644
index 4293ff4a..00000000
--- a/openstackclient/object/v1/lib/container.py
+++ /dev/null
@@ -1,170 +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"""
-
-try:
- from urllib.parse import urlparse # noqa
-except ImportError:
- from urlparse import urlparse # noqa
-
-from openstackclient.object.v1.lib import object as object_lib
-
-
-def create_container(
- session,
- url,
- container,
-):
- """Create a container
-
- :param session: an authenticated keystoneclient.session.Session object
- :param url: endpoint
- :param container: name of container to create
- :returns: dict of returned headers
- """
-
- response = session.put("%s/%s" % (url, container))
- url_parts = urlparse(url)
- data = {
- 'account': url_parts.path.split('/')[-1],
- 'container': container,
- 'x-trans-id': response.headers.get('x-trans-id', None),
- }
-
- return data
-
-
-def delete_container(
- session,
- url,
- container,
-):
- """Delete a container
-
- :param session: an authenticated keystoneclient.session.Session object
- :param url: endpoint
- :param container: name of container to delete
- """
-
- session.delete("%s/%s" % (url, container))
-
-
-def list_containers(
- session,
- url,
- marker=None,
- limit=None,
- end_marker=None,
- prefix=None,
- full_listing=False,
-):
- """Get containers in an account
-
- :param session: an authenticated keystoneclient.session.Session object
- :param url: endpoint
- :param marker: marker query
- :param limit: limit query
- :param end_marker: end_marker query
- :param prefix: prefix query
- :param full_listing: if True, return a full listing, else returns a max
- of 10000 listings
- :returns: list of containers
- """
-
- if full_listing:
- data = listing = list_containers(
- session,
- url,
- marker,
- limit,
- end_marker,
- prefix,
- )
- while listing:
- marker = listing[-1]['name']
- listing = list_containers(
- session,
- url,
- marker,
- limit,
- end_marker,
- prefix,
- )
- 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 prefix:
- params['prefix'] = prefix
- return session.get(url, params=params).json()
-
-
-def save_container(
- session,
- url,
- container
-):
- """Save all the content from a container
-
- :param session: an authenticated keystoneclient.session.Session object
- :param url: endpoint
- :param container: name of container to save
- """
-
- objects = object_lib.list_objects(session, url, container)
- for object in objects:
- object_lib.save_object(session, url, container, object['name'])
-
-
-def show_container(
- session,
- url,
- container,
-):
- """Get container details
-
- :param session: an authenticated keystoneclient.session.Session object
- :param url: endpoint
- :param container: name of container to show
- :returns: dict of returned headers
- """
-
- response = session.head("%s/%s" % (url, container))
- data = {
- 'account': response.headers.get('x-container-meta-owner', None),
- 'container': container,
- 'object_count': response.headers.get(
- 'x-container-object-count',
- 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),
- }
-
- return data
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
diff --git a/openstackclient/object/v1/object.py b/openstackclient/object/v1/object.py
index f0ea7633..cbe9da2f 100644
--- a/openstackclient/object/v1/object.py
+++ b/openstackclient/object/v1/object.py
@@ -24,7 +24,6 @@ from cliff import lister
from cliff import show
from openstackclient.common import utils
-from openstackclient.object.v1.lib import object as lib_object
class CreateObject(lister.Lister):
@@ -52,11 +51,9 @@ class CreateObject(lister.Lister):
results = []
for obj in parsed_args.objects:
- data = lib_object.create_object(
- self.app.client_manager.session,
- self.app.client_manager.object_store.endpoint,
- parsed_args.container,
- obj,
+ data = self.app.client_manager.object_store.object_create(
+ container=parsed_args.container,
+ object=obj,
)
results.append(data)
@@ -92,12 +89,9 @@ class DeleteObject(command.Command):
self.log.debug('take_action(%s)', parsed_args)
for obj in parsed_args.objects:
- lib_object.delete_object(
- self.app.restapi,
- self.app.client_manager.session,
- self.app.client_manager.object_store.endpoint,
- parsed_args.container,
- obj,
+ self.app.client_manager.object_store.object_delete(
+ container=parsed_args.container,
+ object=obj,
)
@@ -181,10 +175,8 @@ class ListObject(lister.Lister):
if parsed_args.all:
kwargs['full_listing'] = True
- data = lib_object.list_objects(
- self.app.client_manager.session,
- self.app.client_manager.object_store.endpoint,
- parsed_args.container,
+ data = self.app.client_manager.object_store.object_list(
+ container=parsed_args.container,
**kwargs
)
@@ -222,12 +214,10 @@ class SaveObject(command.Command):
def take_action(self, parsed_args):
self.log.debug("take_action(%s)", parsed_args)
- lib_object.save_object(
- self.app.client_manager.session,
- self.app.client_manager.object_store.endpoint,
- parsed_args.container,
- parsed_args.object,
- parsed_args.file,
+ self.app.client_manager.object_store.object_save(
+ container=parsed_args.container,
+ object=parsed_args.object,
+ file=parsed_args.file,
)
@@ -253,11 +243,9 @@ class ShowObject(show.ShowOne):
def take_action(self, parsed_args):
self.log.debug('take_action(%s)', parsed_args)
- data = lib_object.show_object(
- self.app.client_manager.session,
- self.app.client_manager.object_store.endpoint,
- parsed_args.container,
- parsed_args.object,
+ data = self.app.client_manager.object_store.object_show(
+ container=parsed_args.container,
+ object=parsed_args.object,
)
return zip(*sorted(six.iteritems(data)))