diff options
| author | TerryHowe <terrylhowe@gmail.com> | 2015-10-15 08:39:23 -0600 |
|---|---|---|
| committer | Terry Howe <terrylhowe@gmail.com> | 2016-02-05 11:18:46 -0700 |
| commit | 514a168656823eb4897e38a15a1a769a7d18f44f (patch) | |
| tree | 135b87cd43c11fd4a03b5e5eea818dcc9d04a07e /openstackclient | |
| parent | 42b607edf117e4a3f421a554308330409c88dbb1 (diff) | |
| download | python-openstackclient-514a168656823eb4897e38a15a1a769a7d18f44f.tar.gz | |
Add recursive object delete for containers
Change-Id: Ib291e79864c218464e842a08efd3742193ba5ff0
Diffstat (limited to 'openstackclient')
| -rw-r--r-- | openstackclient/object/v1/container.py | 14 | ||||
| -rw-r--r-- | openstackclient/tests/object/v1/test_container.py | 90 |
2 files changed, 104 insertions, 0 deletions
diff --git a/openstackclient/object/v1/container.py b/openstackclient/object/v1/container.py index e70afd9d..80b84238 100644 --- a/openstackclient/object/v1/container.py +++ b/openstackclient/object/v1/container.py @@ -59,6 +59,12 @@ class DeleteContainer(command.Command): def get_parser(self, prog_name): parser = super(DeleteContainer, self).get_parser(prog_name) parser.add_argument( + '--recursive', '-r', + action='store_true', + default=False, + help='Recursively delete objects and container', + ) + parser.add_argument( 'containers', metavar='<container>', nargs="+", @@ -69,6 +75,14 @@ class DeleteContainer(command.Command): def take_action(self, parsed_args): for container in parsed_args.containers: + if parsed_args.recursive: + objs = self.app.client_manager.object_store.object_list( + container=container) + for obj in objs: + self.app.client_manager.object_store.object_delete( + container=container, + object=obj['name'], + ) self.app.client_manager.object_store.container_delete( container=container, ) diff --git a/openstackclient/tests/object/v1/test_container.py b/openstackclient/tests/object/v1/test_container.py index afcb3386..d34d73e2 100644 --- a/openstackclient/tests/object/v1/test_container.py +++ b/openstackclient/tests/object/v1/test_container.py @@ -44,6 +44,96 @@ class TestContainer(object_fakes.TestObjectv1): self.api = self.app.client_manager.object_store +@mock.patch('openstackclient.api.object_store_v1.APIv1.object_delete') +@mock.patch('openstackclient.api.object_store_v1.APIv1.object_list') +@mock.patch('openstackclient.api.object_store_v1.APIv1.container_delete') +class TestContainerDelete(TestContainer): + + def setUp(self): + super(TestContainerDelete, self).setUp() + + # Get the command object to test + self.cmd = container.DeleteContainer(self.app, None) + + def test_container_delete(self, c_mock, o_list_mock, o_delete_mock): + c_mock.return_value = None + + arglist = [ + object_fakes.container_name, + ] + verifylist = [ + ('containers', [object_fakes.container_name]), + ('recursive', False), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + self.assertEqual(None, self.cmd.take_action(parsed_args)) + + kwargs = {} + c_mock.assert_called_with( + container=object_fakes.container_name, + **kwargs + ) + self.assertFalse(o_list_mock.called) + self.assertFalse(o_delete_mock.called) + + def test_recursive_delete(self, c_mock, o_list_mock, o_delete_mock): + c_mock.return_value = None + o_list_mock.return_value = [object_fakes.OBJECT] + o_delete_mock.return_value = None + + arglist = [ + '--recursive', + object_fakes.container_name, + ] + verifylist = [ + ('containers', [object_fakes.container_name]), + ('recursive', True), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + self.assertEqual(None, self.cmd.take_action(parsed_args)) + + kwargs = {} + c_mock.assert_called_with( + container=object_fakes.container_name, + **kwargs + ) + o_list_mock.assert_called_with(container=object_fakes.container_name) + o_delete_mock.assert_called_with( + container=object_fakes.container_name, + object=object_fakes.OBJECT['name'], + ) + + def test_r_delete(self, c_mock, o_list_mock, o_delete_mock): + c_mock.return_value = None + o_list_mock.return_value = [object_fakes.OBJECT] + o_delete_mock.return_value = None + + arglist = [ + '-r', + object_fakes.container_name, + ] + verifylist = [ + ('containers', [object_fakes.container_name]), + ('recursive', True), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + self.assertEqual(None, self.cmd.take_action(parsed_args)) + + kwargs = {} + c_mock.assert_called_with( + container=object_fakes.container_name, + **kwargs + ) + o_list_mock.assert_called_with(container=object_fakes.container_name) + o_delete_mock.assert_called_with( + container=object_fakes.container_name, + object=object_fakes.OBJECT['name'], + ) + + @mock.patch( 'openstackclient.api.object_store_v1.APIv1.container_list' ) |
