aliases = kwargs.pop('aliases', ())
+ if name in self._name_parser_map:
+ raise ArgumentError(self, _('conflicting subparser: %s') % name)
+ for alias in aliases:
+ if alias in self._name_parser_map:
+ raise ArgumentError(
+ self, _('conflicting subparser alias: %s') % alias)
+
# create a pseudo-action to hold the choice help
if 'help' in kwargs:
help = kwargs.pop('help')
--spam NEW_SPAM
'''))
+ def test_subparser_conflict(self):
+ parser = argparse.ArgumentParser()
+ sp = parser.add_subparsers()
+ sp.add_parser('fullname', aliases=['alias'])
+ self.assertRaises(argparse.ArgumentError,
+ sp.add_parser, 'fullname')
+ self.assertRaises(argparse.ArgumentError,
+ sp.add_parser, 'alias')
+ self.assertRaises(argparse.ArgumentError,
+ sp.add_parser, 'other', aliases=['fullname'])
+ self.assertRaises(argparse.ArgumentError,
+ sp.add_parser, 'other', aliases=['alias'])
+
# =============================
# Help and Version option tests
--- /dev/null
+Raise an ArgumentError when the same subparser name is added twice to an
+`argparse.ArgumentParser`. This is consistent with the (default) behavior
+when the same option string is added twice to an ArgumentParser.