Merge "Support list commands by group name keyword"

This commit is contained in:
Jenkins 2017-02-27 03:47:11 +00:00 committed by Gerrit Code Review
commit e5ee4b8ca3
5 changed files with 101 additions and 0 deletions

View File

@ -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

View File

@ -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)

View File

@ -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)

View File

@ -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',

View File

@ -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>`_]