Fix undesirable raw Python error

Using the glanceclient without a subcommand while
passing an optional argument triggers the raw Python
error `ERROR: 'Namespace' object has no attribute
'func'`. This bug can be reproduced by issuing the
command `glance --os-image-api-version 2`.
Added a default value to `func` as placeholder
so that a help message is shown instead of the Python error.

Closes-Bug: #1903727
Change-Id: Ie4288262e408192310cbbc240bd1779b265a64fd
This commit is contained in:
Mridula Joshi 2021-08-03 10:35:40 +00:00
parent cb084f5289
commit 1eb0bbbed7
3 changed files with 17 additions and 0 deletions

View File

@ -166,6 +166,8 @@ class OpenStackImagesShell(object):
parser.add_argument('--os_image_api_version', parser.add_argument('--os_image_api_version',
help=argparse.SUPPRESS) help=argparse.SUPPRESS)
parser.set_defaults(func=self.do_help)
if osprofiler_profiler: if osprofiler_profiler:
parser.add_argument('--profile', parser.add_argument('--profile',
metavar='HMAC_KEY', metavar='HMAC_KEY',

View File

@ -211,6 +211,14 @@ class ShellTest(testutils.TestCase):
self.assertEqual(0, actual) self.assertEqual(0, actual)
self.assertFalse(et_mock.called) self.assertFalse(et_mock.called)
def test_help_no_subcommand(self):
shell = openstack_shell.OpenStackImagesShell()
argstr = '--os-image-api-version 2'
with mock.patch.object(shell, '_get_keystone_auth_plugin') as et_mock:
actual = shell.main(argstr.split())
self.assertEqual(0, actual)
self.assertFalse(et_mock.called)
def test_blank_call(self): def test_blank_call(self):
shell = openstack_shell.OpenStackImagesShell() shell = openstack_shell.OpenStackImagesShell()
with mock.patch.object(shell, '_get_keystone_auth_plugin') as et_mock: with mock.patch.object(shell, '_get_keystone_auth_plugin') as et_mock:

View File

@ -0,0 +1,7 @@
---
fixes:
- |
`Bug #1903727 <https://bugs.launchpad.net/python-glanceclient/+bug/1903727>`_:
Fixed raw Python error message when using ``glance`` without
a subcommand while passing an optional argument, such as
``--os-image-api-version``.