diff options
author | Zuul <zuul@review.opendev.org> | 2021-07-20 17:06:26 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2021-07-20 17:06:26 +0000 |
commit | b17176182129caf735cee9ef47466b3fb21aaeb8 (patch) | |
tree | 2ffd205333d8a83bd6190f42d34e48b02b55d5a7 | |
parent | 392f3b2e7cb2dad8036ebbaefbb75dd758914421 (diff) | |
parent | 452fff3aadb01c41355a9254c6f21b76b5ed1609 (diff) | |
download | cliff-b17176182129caf735cee9ef47466b3fb21aaeb8.tar.gz |
Merge "Add conflict_handler parameter as attribut in Command class"
-rw-r--r-- | cliff/command.py | 3 | ||||
-rw-r--r-- | cliff/tests/test_command.py | 46 |
2 files changed, 48 insertions, 1 deletions
diff --git a/cliff/command.py b/cliff/command.py index f8d0501..0a02525 100644 --- a/cliff/command.py +++ b/cliff/command.py @@ -74,6 +74,7 @@ class Command(object, metaclass=abc.ABCMeta): """ deprecated = False + conflict_handler = 'ignore' _description = '' _epilog = None @@ -156,7 +157,7 @@ class Command(object, metaclass=abc.ABCMeta): epilog=self.get_epilog(), prog=prog_name, formatter_class=_argparse.SmartHelpFormatter, - conflict_handler='ignore', + conflict_handler=self.conflict_handler, ) for hook in self._hooks: hook.obj.get_parser(parser) diff --git a/cliff/tests/test_command.py b/cliff/tests/test_command.py index 29c8c33..c9513d0 100644 --- a/cliff/tests/test_command.py +++ b/cliff/tests/test_command.py @@ -172,3 +172,49 @@ class TestArgumentParser(base.TestBase): args = parser.parse_args(['-z', 'foo', 'a', 'b']) self.assertEqual(args.zippy, 'foo') self.assertEqual(args.zero, 'zero-default') + + def test_with_conflict_handler(self): + cmd = TestCommand(None, None) + cmd.conflict_handler = 'resolve' + parser = cmd.get_parser('NAME') + self.assertEqual(parser.conflict_handler, 'resolve') + + def test_raise_conflict_argument_error(self): + cmd = TestCommand(None, None) + parser = cmd.get_parser('NAME') + parser.add_argument( + '-f', '--foo', + dest='foo', + default='foo', + ) + self.assertRaises( + argparse.ArgumentError, + parser.add_argument, + '-f', + ) + + def test_resolve_conflict_argument(self): + cmd = TestCommand(None, None) + cmd.conflict_handler = 'resolve' + parser = cmd.get_parser('NAME') + parser.add_argument( + '-f', '--foo', + dest='foo', + default='foo', + ) + parser.add_argument( + '-f', '--foo', + dest='foo', + default='bar', + ) + args = parser.parse_args(['a', 'b']) + self.assertEqual(args.foo, 'bar') + + def test_wrong_conflict_handler(self): + cmd = TestCommand(None, None) + cmd.conflict_handler = 'wrong' + self.assertRaises( + ValueError, + cmd.get_parser, + 'NAME', + ) |