diff options
| author | Jenkins <jenkins@review.openstack.org> | 2014-10-14 22:23:20 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2014-10-14 22:23:20 +0000 |
| commit | fa9cdef8740dffec347c8e9b1e75af7aae78c623 (patch) | |
| tree | f85db85483a3c96828f03d0b5ba09159ba42a82f | |
| parent | 1d9194d4cba7dd5d7211bea2a408cdf0faf249e4 (diff) | |
| parent | d32185cb34495b0af4b4e646a93aedf4d7f86d25 (diff) | |
| download | python-openstackclient-fa9cdef8740dffec347c8e9b1e75af7aae78c623.tar.gz | |
Merge "Add 'command list' command"
| -rw-r--r-- | openstackclient/common/commandmanager.py | 15 | ||||
| -rw-r--r-- | openstackclient/common/module.py | 16 | ||||
| -rw-r--r-- | openstackclient/tests/common/test_commandmanager.py | 17 | ||||
| -rw-r--r-- | openstackclient/tests/common/test_module.py | 32 | ||||
| -rw-r--r-- | setup.cfg | 1 |
5 files changed, 81 insertions, 0 deletions
diff --git a/openstackclient/common/commandmanager.py b/openstackclient/common/commandmanager.py index 9901ea20..2d9575d9 100644 --- a/openstackclient/common/commandmanager.py +++ b/openstackclient/common/commandmanager.py @@ -16,6 +16,7 @@ """Modify cliff.CommandManager""" import logging +import pkg_resources import cliff.commandmanager @@ -46,3 +47,17 @@ class CommandManager(cliff.commandmanager.CommandManager): def get_command_groups(self): """Returns a list of the loaded command groups""" return self.group_list + + def get_command_names(self, group=None): + """Returns a list of commands loaded for the specified group""" + group_list = [] + if group is not None: + for ep in pkg_resources.iter_entry_points(group): + cmd_name = ( + ep.name.replace('_', ' ') + if self.convert_underscores + else ep.name + ) + group_list.append(cmd_name) + return group_list + return self.commands.keys() diff --git a/openstackclient/common/module.py b/openstackclient/common/module.py index 7f9c52db..356cdca3 100644 --- a/openstackclient/common/module.py +++ b/openstackclient/common/module.py @@ -19,9 +19,25 @@ import logging import six import sys +from cliff import lister from cliff import show +class ListCommand(lister.Lister): + """List recognized commands by group""" + + auth_required = False + log = logging.getLogger(__name__ + '.ListCommand') + + def take_action(self, parsed_args): + self.log.debug('take_action(%s)', parsed_args) + cm = self.app.command_manager + groups = cm.get_command_groups() + + columns = ('Command Group', 'Commands') + return (columns, ((c, cm.get_command_names(group=c)) for c in groups)) + + class ListModule(show.ShowOne): """List module versions""" diff --git a/openstackclient/tests/common/test_commandmanager.py b/openstackclient/tests/common/test_commandmanager.py index ca9ee9a7..e7803a48 100644 --- a/openstackclient/tests/common/test_commandmanager.py +++ b/openstackclient/tests/common/test_commandmanager.py @@ -86,3 +86,20 @@ class TestCommandManager(utils.TestCase): gl = mgr.get_command_groups() self.assertEqual(['test', 'greek'], gl) + + def test_get_command_names(self): + mock_cmd_one = mock.Mock() + mock_cmd_one.name = 'one' + mock_cmd_two = mock.Mock() + mock_cmd_two.name = 'cmd two' + mock_pkg_resources = mock.Mock( + return_value=[mock_cmd_one, mock_cmd_two], + ) + with mock.patch( + 'pkg_resources.iter_entry_points', + mock_pkg_resources, + ) as iter_entry_points: + mgr = commandmanager.CommandManager('test') + assert iter_entry_points.called_once_with('test') + cmds = mgr.get_command_names('test') + self.assertEqual(['one', 'cmd two'], cmds) diff --git a/openstackclient/tests/common/test_module.py b/openstackclient/tests/common/test_module.py index ce1592e4..6918c1b4 100644 --- a/openstackclient/tests/common/test_module.py +++ b/openstackclient/tests/common/test_module.py @@ -42,6 +42,38 @@ MODULES = { } +class TestCommandList(utils.TestCommand): + + def setUp(self): + super(TestCommandList, self).setUp() + + self.app.command_manager = mock.Mock() + self.app.command_manager.get_command_groups.return_value = ['test'] + self.app.command_manager.get_command_names.return_value = [ + 'one', + 'cmd two', + ] + + # Get the command object to test + self.cmd = osc_module.ListCommand(self.app, None) + + def test_command_list_no_options(self): + arglist = [] + verifylist = [] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + # DisplayCommandBase.take_action() returns two tuples + columns, data = self.cmd.take_action(parsed_args) + + collist = ('Command Group', 'Commands') + self.assertEqual(collist, columns) + datalist = (( + 'test', + ['one', 'cmd two'], + ), ) + self.assertEqual(datalist, tuple(data)) + + @mock.patch.dict( 'openstackclient.common.module.sys.modules', values=MODULES, @@ -28,6 +28,7 @@ console_scripts = openstack = openstackclient.shell:main openstack.cli = + command_list = openstackclient.common.module:ListCommand module_list = openstackclient.common.module:ListModule openstack.cli.base = |
