Skip to content

Commit b725b50

Browse files
committed
Multiple args for object and container commands
Have object and container create and delete handle multiple arguments. Change-Id: I389358c13ac2d99655ca26e784e3d299286c0af3
1 parent dc9ce6d commit b725b50

2 files changed

Lines changed: 57 additions & 34 deletions

File tree

openstackclient/object/v1/container.py

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -27,30 +27,39 @@
2727
from openstackclient.object.v1.lib import container as lib_container
2828

2929

30-
class CreateContainer(show.ShowOne):
30+
class CreateContainer(lister.Lister):
3131
"""Create a container"""
3232

3333
log = logging.getLogger(__name__ + '.CreateContainer')
3434

3535
def get_parser(self, prog_name):
3636
parser = super(CreateContainer, self).get_parser(prog_name)
3737
parser.add_argument(
38-
'container',
38+
'containers',
3939
metavar='<container>',
40-
help='New container name',
40+
nargs="+",
41+
help='Container name(s) to create',
4142
)
4243
return parser
4344

4445
def take_action(self, parsed_args):
4546
self.log.debug('take_action(%s)', parsed_args)
4647

47-
data = lib_container.create_container(
48-
self.app.client_manager.session,
49-
self.app.client_manager.object_store.endpoint,
50-
parsed_args.container,
51-
)
48+
results = []
49+
for container in parsed_args.containers:
50+
data = lib_container.create_container(
51+
self.app.client_manager.session,
52+
self.app.client_manager.object_store.endpoint,
53+
container,
54+
)
55+
results.append(data)
5256

53-
return zip(*sorted(six.iteritems(data)))
57+
columns = ("account", "container", "x-trans-id")
58+
return (columns,
59+
(utils.get_dict_properties(
60+
s, columns,
61+
formatters={},
62+
) for s in results))
5463

5564

5665
class DeleteContainer(command.Command):
@@ -61,20 +70,22 @@ class DeleteContainer(command.Command):
6170
def get_parser(self, prog_name):
6271
parser = super(DeleteContainer, self).get_parser(prog_name)
6372
parser.add_argument(
64-
'container',
73+
'containers',
6574
metavar='<container>',
66-
help='Container name to delete',
75+
nargs="+",
76+
help='Container name(s) to delete',
6777
)
6878
return parser
6979

7080
def take_action(self, parsed_args):
7181
self.log.debug('take_action(%s)', parsed_args)
7282

73-
lib_container.delete_container(
74-
self.app.client_manager.session,
75-
self.app.client_manager.object_store.endpoint,
76-
parsed_args.container,
77-
)
83+
for container in parsed_args.containers:
84+
lib_container.delete_container(
85+
self.app.client_manager.session,
86+
self.app.client_manager.object_store.endpoint,
87+
container,
88+
)
7889

7990

8091
class ListContainer(lister.Lister):

openstackclient/object/v1/object.py

Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
from openstackclient.object.v1.lib import object as lib_object
2828

2929

30-
class CreateObject(show.ShowOne):
30+
class CreateObject(lister.Lister):
3131
"""Upload an object to a container"""
3232

3333
log = logging.getLogger(__name__ + '.CreateObject')
@@ -40,23 +40,32 @@ def get_parser(self, prog_name):
4040
help='Container to store new object',
4141
)
4242
parser.add_argument(
43-
'object',
43+
'objects',
4444
metavar='<object-name>',
45-
help='Local path of object to upload',
45+
nargs="+",
46+
help='Local path of object(s) to upload',
4647
)
4748
return parser
4849

4950
def take_action(self, parsed_args):
5051
self.log.debug('take_action(%s)', parsed_args)
5152

52-
data = lib_object.create_object(
53-
self.app.client_manager.session,
54-
self.app.client_manager.object_store.endpoint,
55-
parsed_args.container,
56-
parsed_args.object,
57-
)
53+
results = []
54+
for obj in parsed_args.objects:
55+
data = lib_object.create_object(
56+
self.app.client_manager.session,
57+
self.app.client_manager.object_store.endpoint,
58+
parsed_args.container,
59+
obj,
60+
)
61+
results.append(data)
5862

59-
return zip(*sorted(six.iteritems(data)))
63+
columns = ("object", "container", "etag")
64+
return (columns,
65+
(utils.get_dict_properties(
66+
s, columns,
67+
formatters={},
68+
) for s in results))
6069

6170

6271
class DeleteObject(command.Command):
@@ -72,21 +81,24 @@ def get_parser(self, prog_name):
7281
help='Container that stores the object to delete',
7382
)
7483
parser.add_argument(
75-
'object',
84+
'objects',
7685
metavar='<object-name>',
77-
help='Object to delete',
86+
nargs="+",
87+
help='Object(s) to delete',
7888
)
7989
return parser
8090

8191
def take_action(self, parsed_args):
8292
self.log.debug('take_action(%s)', parsed_args)
8393

84-
lib_object.delete_object(
85-
self.app.client_manager.session,
86-
self.app.client_manager.object_store.endpoint,
87-
parsed_args.container,
88-
parsed_args.object,
89-
)
94+
for obj in parsed_args.objects:
95+
lib_object.delete_object(
96+
self.app.restapi,
97+
self.app.client_manager.session,
98+
self.app.client_manager.object_store.endpoint,
99+
parsed_args.container,
100+
obj,
101+
)
90102

91103

92104
class ListObject(lister.Lister):

0 commit comments

Comments
 (0)