Error handling for KeyValueAction class.

The set --property command requires that the input match
the "key=value" type, but if the type don't match, the return
value will be None, and the command still can be implemented
successfully, this may confuse the users. I think we should
raise exception if the argument type don't match "key=value".
So I make some changes in KeyValueAction class in this patch.

Change-Id: If4a00ae6da08bc12362ef2fc82012b42839141f0
This commit is contained in:
Huanxuan Ao 2016-06-08 11:41:02 +08:00
parent 619859009a
commit 876d81ef21
2 changed files with 10 additions and 11 deletions

View File

@ -35,7 +35,9 @@ class KeyValueAction(argparse.Action):
if '=' in values:
getattr(namespace, self.dest, {}).update([values.split('=', 1)])
else:
getattr(namespace, self.dest, {}).pop(values, None)
msg = _("Expected 'key=value' type, "
"but got: %s") % (str(values))
raise argparse.ArgumentTypeError(msg)
class MultiKeyValueAction(argparse.Action):

View File

@ -49,16 +49,13 @@ class TestKeyValueAction(utils.TestCase):
self.assertDictEqual(expect, actual)
def test_error_values(self):
results = self.parser.parse_args([
'--property', 'red',
'--property', 'green=100%',
'--property', 'blue',
])
actual = getattr(results, 'property', {})
# There should be no red or blue
expect = {'green': '100%', 'format': '#rgb'}
self.assertDictEqual(expect, actual)
self.assertRaises(
argparse.ArgumentTypeError,
self.parser.parse_args,
[
'--property', 'red',
]
)
class TestMultiKeyValueAction(utils.TestCase):