summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2017-02-27 03:47:11 +0000
committerGerrit Code Review <review@openstack.org>2017-02-27 03:47:11 +0000
commite5ee4b8ca3a1de9208ea0e05efec4162c4b9d6a4 (patch)
tree671e41ceb54d251fc731a2c00d9b4b6a338c404e
parentf63a9f402dc3761a1f7e358d92b7e1aa33098c7a (diff)
parent0898ebacb8d9c38ae36adaf593867a9b16a50504 (diff)
downloadpython-openstackclient-e5ee4b8ca3a1de9208ea0e05efec4162c4b9d6a4.tar.gz
Merge "Support list commands by group name keyword"
-rw-r--r--doc/source/command-objects/command.rst6
-rw-r--r--openstackclient/common/module.py14
-rw-r--r--openstackclient/tests/functional/common/test_module.py35
-rw-r--r--openstackclient/tests/unit/common/test_module.py35
-rw-r--r--releasenotes/notes/bug-1666780-c10010e9061689d3.yaml11
5 files changed, 101 insertions, 0 deletions
diff --git a/doc/source/command-objects/command.rst b/doc/source/command-objects/command.rst
index 34c07da6..918fd959 100644
--- a/doc/source/command-objects/command.rst
+++ b/doc/source/command-objects/command.rst
@@ -15,3 +15,9 @@ List recognized commands by group
.. code:: bash
openstack command list
+ [--group <group-keyword>]
+
+.. option:: --group <group-keyword>
+
+ Show commands filtered by a command group, for example: identity, volume,
+ compute, image, network and other keywords
diff --git a/openstackclient/common/module.py b/openstackclient/common/module.py
index ba911ecb..20497f21 100644
--- a/openstackclient/common/module.py
+++ b/openstackclient/common/module.py
@@ -29,12 +29,26 @@ class ListCommand(command.Lister):
auth_required = False
+ def get_parser(self, prog_name):
+ parser = super(ListCommand, self).get_parser(prog_name)
+ parser.add_argument(
+ '--group',
+ metavar='<group-keyword>',
+ help=_('Show commands filtered by a command group, for example: '
+ 'identity, volume, compute, image, network and '
+ 'other keywords'),
+ )
+ return parser
+
def take_action(self, parsed_args):
cm = self.app.command_manager
groups = cm.get_command_groups()
groups = sorted(groups)
columns = ('Command Group', 'Commands')
+ if parsed_args.group:
+ groups = (group for group in groups if parsed_args.group in group)
+
commands = []
for group in groups:
command_names = cm.get_command_names(group)
diff --git a/openstackclient/tests/functional/common/test_module.py b/openstackclient/tests/functional/common/test_module.py
index f4f2e952..e9e4ee3a 100644
--- a/openstackclient/tests/functional/common/test_module.py
+++ b/openstackclient/tests/functional/common/test_module.py
@@ -42,3 +42,38 @@ class ModuleTest(base.TestCase):
cmd_output = json.loads(self.openstack('module list --all -f json'))
for one_module in self.CLIENTS + self.LIBS:
self.assertIn(one_module, cmd_output.keys())
+
+
+class CommandTest(base.TestCase):
+ """Functional tests for openstackclient command list."""
+ GROUPS = [
+ 'openstack.volume.v2',
+ 'openstack.network.v2',
+ 'openstack.image.v2',
+ 'openstack.identity.v3',
+ 'openstack.compute.v2',
+ 'openstack.common',
+ 'openstack.cli',
+ ]
+
+ def test_command_list_no_option(self):
+ cmd_output = json.loads(self.openstack('command list -f json'))
+ group_names = [each.get('Command Group') for each in cmd_output]
+ for one_group in self.GROUPS:
+ self.assertIn(one_group, group_names)
+
+ def test_command_list_with_group(self):
+ input_groups = [
+ 'volume',
+ 'network',
+ 'image',
+ 'identity',
+ 'compute.v2'
+ ]
+ for each_input in input_groups:
+ cmd_output = json.loads(self.openstack(
+ 'command list --group %s -f json' % each_input
+ ))
+ group_names = [each.get('Command Group') for each in cmd_output]
+ for each_name in group_names:
+ self.assertIn(each_input, each_name)
diff --git a/openstackclient/tests/unit/common/test_module.py b/openstackclient/tests/unit/common/test_module.py
index 4b586d3b..2491d639 100644
--- a/openstackclient/tests/unit/common/test_module.py
+++ b/openstackclient/tests/unit/common/test_module.py
@@ -88,6 +88,41 @@ class TestCommandList(utils.TestCommand):
self.assertEqual(datalist, tuple(data))
+ def test_command_list_with_group_not_found(self):
+ arglist = [
+ '--group', 'not_exist',
+ ]
+ verifylist = [
+ ('group', 'not_exist'),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = self.cmd.take_action(parsed_args)
+
+ collist = ('Command Group', 'Commands')
+ self.assertEqual(collist, columns)
+ self.assertEqual([], data)
+
+ def test_command_list_with_group(self):
+ arglist = [
+ '--group', 'common',
+ ]
+ verifylist = [
+ ('group', 'common'),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = self.cmd.take_action(parsed_args)
+
+ collist = ('Command Group', 'Commands')
+ self.assertEqual(collist, columns)
+ datalist = ((
+ 'openstack.common',
+ 'limits show\nextension list'
+ ),)
+
+ self.assertEqual(datalist, tuple(data))
+
@mock.patch.dict(
'openstackclient.common.module.sys.modules',
diff --git a/releasenotes/notes/bug-1666780-c10010e9061689d3.yaml b/releasenotes/notes/bug-1666780-c10010e9061689d3.yaml
new file mode 100644
index 00000000..952a1f7a
--- /dev/null
+++ b/releasenotes/notes/bug-1666780-c10010e9061689d3.yaml
@@ -0,0 +1,11 @@
+---
+features:
+ - |
+ Support list commands by group name keyword. Add ``--group`` option to
+ filter the commands by group name keyword, like: --group volume, list all
+ openstack.volume.v2 (cinder) commands.
+ That support the scenario that users need to know the current support
+ commands of some OpenStack services(nova, neutron, cinder and so on) in
+ OSC, and make it easier for users to find out the related commands that
+ they care about.
+ [Bug `1666780 <https://bugs.launchpad.net/python-openstackclient/+bug/1666780>`_]