From 160825f909cb1e0f876c2a040dbfb5aae5fd01d4 Mon Sep 17 00:00:00 2001 From: Erno Kuvaja Date: Thu, 10 Sep 2015 10:10:06 +0000 Subject: [PATCH] Fixes CLI client called without subcommands If CLI client is called without any subcommands or arguments it will fail with """'Namespace' object has no attribute 'command'""". This is coming from the getattr which does not have alternate value specified. Closes-Bug: #1494259 Change-Id: I461f0d4a91f3af2224bafc14a88572a8e4a3c051 --- glanceclient/shell.py | 5 +++-- glanceclient/tests/unit/test_shell.py | 7 +++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/glanceclient/shell.py b/glanceclient/shell.py index 065e9d6..faa014c 100755 --- a/glanceclient/shell.py +++ b/glanceclient/shell.py @@ -717,7 +717,7 @@ class OpenStackImagesShell(object): help='Display help for .') def do_help(self, args, parser): """Display help about this program or one of its subcommands.""" - command = getattr(args, 'command') or '' + command = getattr(args, 'command', '') if command: if args.command in self.subcommands: @@ -725,13 +725,14 @@ class OpenStackImagesShell(object): else: raise exc.CommandError("'%s' is not a valid subcommand" % args.command) + command = ' ' + command else: parser.print_help() if not args.os_image_api_version or args.os_image_api_version == '2': print() print(("Run `glance --os-image-api-version 1 help%s` " - "for v1 help") % (' ' + command)) + "for v1 help") % command) def do_bash_completion(self, _args): """Prints arguments for bash_completion. diff --git a/glanceclient/tests/unit/test_shell.py b/glanceclient/tests/unit/test_shell.py index 9ede51e..6c37462 100644 --- a/glanceclient/tests/unit/test_shell.py +++ b/glanceclient/tests/unit/test_shell.py @@ -158,6 +158,13 @@ class ShellTest(testutils.TestCase): self.assertEqual(0, actual) self.assertFalse(et_mock.called) + def test_blank_call(self): + shell = openstack_shell.OpenStackImagesShell() + with mock.patch.object(shell, '_get_endpoint_and_token') as et_mock: + actual = shell.main('') + self.assertEqual(0, actual) + self.assertFalse(et_mock.called) + def test_help_on_subcommand_error(self): self.assertRaises(exc.CommandError, shell, '--os-image-api-version 2 help bad')