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
This commit is contained in:
Erno Kuvaja
2015-09-10 10:10:06 +00:00
parent 337b2dce72
commit 160825f909
2 changed files with 10 additions and 2 deletions

View File

@@ -717,7 +717,7 @@ class OpenStackImagesShell(object):
help='Display help for <subcommand>.')
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.

View File

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