summaryrefslogtreecommitdiff
path: root/openstackclient
diff options
context:
space:
mode:
authorDean Troyer <dtroyer@gmail.com>2014-08-27 23:26:42 -0500
committerDean Troyer <dtroyer@gmail.com>2014-10-08 21:57:26 -0500
commitd32185cb34495b0af4b4e646a93aedf4d7f86d25 (patch)
treef975c45647726706c1826a902e085ad507a0a467 /openstackclient
parent5b6c24fdb0154bbbf41f0b05211001d783b69635 (diff)
downloadpython-openstackclient-d32185cb34495b0af4b4e646a93aedf4d7f86d25.tar.gz
Add 'command list' command
* Add method to CommandManager to retrieve command names by group * Add ListCommands To list command groups loaded by cliff Change-Id: I37fe2471aa2fafa8aa223159452d52b1981021d6
Diffstat (limited to 'openstackclient')
-rw-r--r--openstackclient/common/commandmanager.py15
-rw-r--r--openstackclient/common/module.py16
-rw-r--r--openstackclient/tests/common/test_commandmanager.py17
-rw-r--r--openstackclient/tests/common/test_module.py32
4 files changed, 80 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,