Skip to content

Commit 8af26a5

Browse files
author
Steve Martinelli
committed
Add commands for object upload and delete
Add commands to upload an object to a container, and to delete an object from a container. Change-Id: I37c02315495bba5abe612733d1109a3d4ce256a1 implements: bp swift-client
1 parent fed6921 commit 8af26a5

3 files changed

Lines changed: 111 additions & 0 deletions

File tree

‎openstackclient/object/v1/lib/object.py‎

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,52 @@
2424
from urlparse import urlparse # noqa
2525

2626

27+
def create_object(
28+
api,
29+
url,
30+
container,
31+
object,
32+
):
33+
"""Create an object, upload it to a container
34+
35+
:param api: a restapi object
36+
:param url: endpoint
37+
:param container: name of container to store object
38+
:param object: local path to object
39+
:returns: dict of returned headers
40+
"""
41+
42+
full_url = "%s/%s/%s" % (url, container, object)
43+
response = api.put(full_url, data=open(object))
44+
url_parts = urlparse(url)
45+
data = {
46+
'account': url_parts.path.split('/')[-1],
47+
'container': container,
48+
'object': object,
49+
}
50+
data['x-trans-id'] = response.headers.get('X-Trans-Id', None)
51+
data['etag'] = response.headers.get('Etag', None)
52+
53+
return data
54+
55+
56+
def delete_object(
57+
api,
58+
url,
59+
container,
60+
object,
61+
):
62+
"""Delete an object stored in a container
63+
64+
:param api: a restapi object
65+
:param url: endpoint
66+
:param container: name of container that stores object
67+
:param container: name of object to delete
68+
"""
69+
70+
api.delete("%s/%s/%s" % (url, container, object))
71+
72+
2773
def list_objects(
2874
api,
2975
url,

‎openstackclient/object/v1/object.py‎

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,76 @@
1919
import logging
2020
import six
2121

22+
from cliff import command
2223
from cliff import lister
2324
from cliff import show
2425

2526
from openstackclient.common import utils
2627
from openstackclient.object.v1.lib import object as lib_object
2728

2829

30+
class CreateObject(show.ShowOne):
31+
"""Upload an object to a container"""
32+
33+
log = logging.getLogger(__name__ + '.CreateObject')
34+
35+
def get_parser(self, prog_name):
36+
parser = super(CreateObject, self).get_parser(prog_name)
37+
parser.add_argument(
38+
'container',
39+
metavar='<container>',
40+
help='Container to store new object',
41+
)
42+
parser.add_argument(
43+
'object',
44+
metavar='<object-name>',
45+
help='Local path of object to upload',
46+
)
47+
return parser
48+
49+
def take_action(self, parsed_args):
50+
self.log.debug('take_action(%s)', parsed_args)
51+
52+
data = lib_object.create_object(
53+
self.app.restapi,
54+
self.app.client_manager.object_store.endpoint,
55+
parsed_args.container,
56+
parsed_args.object,
57+
)
58+
59+
return zip(*sorted(six.iteritems(data)))
60+
61+
62+
class DeleteObject(command.Command):
63+
"""Delete an object within a container"""
64+
65+
log = logging.getLogger(__name__ + '.DeleteObject')
66+
67+
def get_parser(self, prog_name):
68+
parser = super(DeleteObject, self).get_parser(prog_name)
69+
parser.add_argument(
70+
'container',
71+
metavar='<container>',
72+
help='Container that stores the object to delete',
73+
)
74+
parser.add_argument(
75+
'object',
76+
metavar='<object-name>',
77+
help='Object to delete',
78+
)
79+
return parser
80+
81+
def take_action(self, parsed_args):
82+
self.log.debug('take_action(%s)', parsed_args)
83+
84+
lib_object.delete_object(
85+
self.app.restapi,
86+
self.app.client_manager.object_store.endpoint,
87+
parsed_args.container,
88+
parsed_args.object,
89+
)
90+
91+
2992
class ListObject(lister.Lister):
3093
"""List objects"""
3194

‎setup.cfg‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,8 @@ openstack.object_store.v1 =
272272
container_delete = openstackclient.object.v1.container:DeleteContainer
273273
container_list = openstackclient.object.v1.container:ListContainer
274274
container_show = openstackclient.object.v1.container:ShowContainer
275+
object_create = openstackclient.object.v1.object:CreateObject
276+
object_delete = openstackclient.object.v1.object:DeleteObject
275277
object_list = openstackclient.object.v1.object:ListObject
276278
object_show = openstackclient.object.v1.object:ShowObject
277279

0 commit comments

Comments
 (0)