Merge "Add conflict_handler parameter as attribut in Command class"
This commit is contained in:
commit
b171761821
|
@ -74,6 +74,7 @@ class Command(object, metaclass=abc.ABCMeta):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
deprecated = False
|
deprecated = False
|
||||||
|
conflict_handler = 'ignore'
|
||||||
|
|
||||||
_description = ''
|
_description = ''
|
||||||
_epilog = None
|
_epilog = None
|
||||||
|
@ -156,7 +157,7 @@ class Command(object, metaclass=abc.ABCMeta):
|
||||||
epilog=self.get_epilog(),
|
epilog=self.get_epilog(),
|
||||||
prog=prog_name,
|
prog=prog_name,
|
||||||
formatter_class=_argparse.SmartHelpFormatter,
|
formatter_class=_argparse.SmartHelpFormatter,
|
||||||
conflict_handler='ignore',
|
conflict_handler=self.conflict_handler,
|
||||||
)
|
)
|
||||||
for hook in self._hooks:
|
for hook in self._hooks:
|
||||||
hook.obj.get_parser(parser)
|
hook.obj.get_parser(parser)
|
||||||
|
|
|
@ -172,3 +172,49 @@ class TestArgumentParser(base.TestBase):
|
||||||
args = parser.parse_args(['-z', 'foo', 'a', 'b'])
|
args = parser.parse_args(['-z', 'foo', 'a', 'b'])
|
||||||
self.assertEqual(args.zippy, 'foo')
|
self.assertEqual(args.zippy, 'foo')
|
||||||
self.assertEqual(args.zero, 'zero-default')
|
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',
|
||||||
|
)
|
||||||
|
|
Loading…
Reference in New Issue