Merge "Add conflict_handler parameter as attribut in Command class"

This commit is contained in:
Zuul 2021-07-20 17:06:26 +00:00 committed by Gerrit Code Review
commit b171761821
2 changed files with 48 additions and 1 deletions

View File

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

View File

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