Kaydet (Commit) af1adbee authored tarafından Florent Xicluna's avatar Florent Xicluna

Issue #13248: argparse: Remove obsolete argument "version" of ArgumentParser.

üst 3008ec07
...@@ -1579,7 +1579,6 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): ...@@ -1579,7 +1579,6 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer):
usage=None, usage=None,
description=None, description=None,
epilog=None, epilog=None,
version=None,
parents=[], parents=[],
formatter_class=HelpFormatter, formatter_class=HelpFormatter,
prefix_chars='-', prefix_chars='-',
...@@ -1588,14 +1587,6 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): ...@@ -1588,14 +1587,6 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer):
conflict_handler='error', conflict_handler='error',
add_help=True): add_help=True):
if version is not None:
import warnings
warnings.warn(
"""The "version" argument to ArgumentParser is deprecated. """
"""Please use """
""""add_argument(..., action='version', version="N", ...)" """
"""instead""", DeprecationWarning)
superinit = super(ArgumentParser, self).__init__ superinit = super(ArgumentParser, self).__init__
superinit(description=description, superinit(description=description,
prefix_chars=prefix_chars, prefix_chars=prefix_chars,
...@@ -1609,7 +1600,6 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): ...@@ -1609,7 +1600,6 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer):
self.prog = prog self.prog = prog
self.usage = usage self.usage = usage
self.epilog = epilog self.epilog = epilog
self.version = version
self.formatter_class = formatter_class self.formatter_class = formatter_class
self.fromfile_prefix_chars = fromfile_prefix_chars self.fromfile_prefix_chars = fromfile_prefix_chars
self.add_help = add_help self.add_help = add_help
...@@ -1624,7 +1614,7 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): ...@@ -1624,7 +1614,7 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer):
return string return string
self.register('type', None, identity) self.register('type', None, identity)
# add help and version arguments if necessary # add help argument if necessary
# (using explicit default to override global argument_default) # (using explicit default to override global argument_default)
default_prefix = '-' if '-' in prefix_chars else prefix_chars[0] default_prefix = '-' if '-' in prefix_chars else prefix_chars[0]
if self.add_help: if self.add_help:
...@@ -1632,12 +1622,6 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): ...@@ -1632,12 +1622,6 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer):
default_prefix+'h', default_prefix*2+'help', default_prefix+'h', default_prefix*2+'help',
action='help', default=SUPPRESS, action='help', default=SUPPRESS,
help=_('show this help message and exit')) help=_('show this help message and exit'))
if self.version:
self.add_argument(
default_prefix+'v', default_prefix*2+'version',
action='version', default=SUPPRESS,
version=self.version,
help=_("show program's version number and exit"))
# add parent arguments and defaults # add parent arguments and defaults
for parent in parents: for parent in parents:
...@@ -1657,7 +1641,6 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): ...@@ -1657,7 +1641,6 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer):
'prog', 'prog',
'usage', 'usage',
'description', 'description',
'version',
'formatter_class', 'formatter_class',
'conflict_handler', 'conflict_handler',
'add_help', 'add_help',
...@@ -2320,16 +2303,6 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): ...@@ -2320,16 +2303,6 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer):
# determine help from format above # determine help from format above
return formatter.format_help() return formatter.format_help()
def format_version(self):
import warnings
warnings.warn(
'The format_version method is deprecated -- the "version" '
'argument to ArgumentParser is no longer supported.',
DeprecationWarning)
formatter = self._get_formatter()
formatter.add_text(self.version)
return formatter.format_help()
def _get_formatter(self): def _get_formatter(self):
return self.formatter_class(prog=self.prog) return self.formatter_class(prog=self.prog)
...@@ -2346,14 +2319,6 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): ...@@ -2346,14 +2319,6 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer):
file = _sys.stdout file = _sys.stdout
self._print_message(self.format_help(), file) self._print_message(self.format_help(), file)
def print_version(self, file=None):
import warnings
warnings.warn(
'The print_version method is deprecated -- the "version" '
'argument to ArgumentParser is no longer supported.',
DeprecationWarning)
self._print_message(self.format_version(), file)
def _print_message(self, message, file=None): def _print_message(self, message, file=None):
if message: if message:
if file is None: if file is None:
......
...@@ -1323,20 +1323,21 @@ class TestParserDefaultSuppress(ParserTestCase): ...@@ -1323,20 +1323,21 @@ class TestParserDefaultSuppress(ParserTestCase):
class TestParserDefault42(ParserTestCase): class TestParserDefault42(ParserTestCase):
"""Test actions with a parser-level default of 42""" """Test actions with a parser-level default of 42"""
parser_signature = Sig(argument_default=42, version='1.0') parser_signature = Sig(argument_default=42)
argument_signatures = [ argument_signatures = [
Sig('--version', action='version', version='1.0'),
Sig('foo', nargs='?'), Sig('foo', nargs='?'),
Sig('bar', nargs='*'), Sig('bar', nargs='*'),
Sig('--baz', action='store_true'), Sig('--baz', action='store_true'),
] ]
failures = ['-x'] failures = ['-x']
successes = [ successes = [
('', NS(foo=42, bar=42, baz=42)), ('', NS(foo=42, bar=42, baz=42, version=42)),
('a', NS(foo='a', bar=42, baz=42)), ('a', NS(foo='a', bar=42, baz=42, version=42)),
('a b', NS(foo='a', bar=['b'], baz=42)), ('a b', NS(foo='a', bar=['b'], baz=42, version=42)),
('--baz', NS(foo=42, bar=42, baz=True)), ('--baz', NS(foo=42, bar=42, baz=True, version=42)),
('a --baz', NS(foo='a', bar=42, baz=True)), ('a --baz', NS(foo='a', bar=42, baz=True, version=42)),
('--baz a b', NS(foo='a', bar=['b'], baz=True)), ('--baz a b', NS(foo='a', bar=['b'], baz=True, version=42)),
] ]
...@@ -2896,10 +2897,9 @@ class TestHelpFormattingMetaclass(type): ...@@ -2896,10 +2897,9 @@ class TestHelpFormattingMetaclass(type):
parser_text = sfile.getvalue() parser_text = sfile.getvalue()
self._test(tester, parser_text) self._test(tester, parser_text)
# add tests for {format,print}_{usage,help,version} # add tests for {format,print}_{usage,help}
for func_suffix, std_name in [('usage', 'stdout'), for func_suffix, std_name in [('usage', 'stdout'),
('help', 'stdout'), ('help', 'stdout')]:
('version', 'stderr')]:
AddTests(cls, func_suffix, std_name) AddTests(cls, func_suffix, std_name)
bases = TestCase, bases = TestCase,
...@@ -2910,8 +2910,9 @@ class TestHelpBiggerOptionals(HelpTestCase): ...@@ -2910,8 +2910,9 @@ class TestHelpBiggerOptionals(HelpTestCase):
"""Make sure that argument help aligns when options are longer""" """Make sure that argument help aligns when options are longer"""
parser_signature = Sig(prog='PROG', description='DESCRIPTION', parser_signature = Sig(prog='PROG', description='DESCRIPTION',
epilog='EPILOG', version='0.1') epilog='EPILOG')
argument_signatures = [ argument_signatures = [
Sig('-v', '--version', action='version', version='0.1'),
Sig('-x', action='store_true', help='X HELP'), Sig('-x', action='store_true', help='X HELP'),
Sig('--y', help='Y HELP'), Sig('--y', help='Y HELP'),
Sig('foo', help='FOO HELP'), Sig('foo', help='FOO HELP'),
...@@ -2946,8 +2947,9 @@ class TestHelpBiggerOptionalGroups(HelpTestCase): ...@@ -2946,8 +2947,9 @@ class TestHelpBiggerOptionalGroups(HelpTestCase):
"""Make sure that argument help aligns when options are longer""" """Make sure that argument help aligns when options are longer"""
parser_signature = Sig(prog='PROG', description='DESCRIPTION', parser_signature = Sig(prog='PROG', description='DESCRIPTION',
epilog='EPILOG', version='0.1') epilog='EPILOG')
argument_signatures = [ argument_signatures = [
Sig('-v', '--version', action='version', version='0.1'),
Sig('-x', action='store_true', help='X HELP'), Sig('-x', action='store_true', help='X HELP'),
Sig('--y', help='Y HELP'), Sig('--y', help='Y HELP'),
Sig('foo', help='FOO HELP'), Sig('foo', help='FOO HELP'),
...@@ -3114,9 +3116,9 @@ HHAAHHH ...@@ -3114,9 +3116,9 @@ HHAAHHH
class TestHelpWrappingLongNames(HelpTestCase): class TestHelpWrappingLongNames(HelpTestCase):
"""Make sure that text after long names starts on the next line""" """Make sure that text after long names starts on the next line"""
parser_signature = Sig(usage='USAGE', description= 'D D' * 30, parser_signature = Sig(usage='USAGE', description= 'D D' * 30)
version='V V'*30)
argument_signatures = [ argument_signatures = [
Sig('-v', '--version', action='version', version='V V' * 30),
Sig('-x', metavar='X' * 25, help='XH XH' * 20), Sig('-x', metavar='X' * 25, help='XH XH' * 20),
Sig('y', metavar='y' * 25, help='YH YH' * 20), Sig('y', metavar='y' * 25, help='YH YH' * 20),
] ]
...@@ -3719,8 +3721,9 @@ class TestHelpNoHelpOptional(HelpTestCase): ...@@ -3719,8 +3721,9 @@ class TestHelpNoHelpOptional(HelpTestCase):
class TestHelpVersionOptional(HelpTestCase): class TestHelpVersionOptional(HelpTestCase):
"""Test that the --version argument can be suppressed help messages""" """Test that the --version argument can be suppressed help messages"""
parser_signature = Sig(prog='PROG', version='1.0') parser_signature = Sig(prog='PROG')
argument_signatures = [ argument_signatures = [
Sig('-v', '--version', action='version', version='1.0'),
Sig('--foo', help='foo help'), Sig('--foo', help='foo help'),
Sig('spam', help='spam help'), Sig('spam', help='spam help'),
] ]
...@@ -3953,8 +3956,8 @@ class TestHelpVersionAction(HelpTestCase): ...@@ -3953,8 +3956,8 @@ class TestHelpVersionAction(HelpTestCase):
class TestHelpSubparsersOrdering(HelpTestCase): class TestHelpSubparsersOrdering(HelpTestCase):
"""Test ordering of subcommands in help matches the code""" """Test ordering of subcommands in help matches the code"""
parser_signature = Sig(prog='PROG', parser_signature = Sig(prog='PROG',
description='display some subcommands', description='display some subcommands')
version='0.1') argument_signatures = [Sig('-v', '--version', action='version', version='0.1')]
subparsers_signatures = [Sig(name=name) subparsers_signatures = [Sig(name=name)
for name in ('a', 'b', 'c', 'd', 'e')] for name in ('a', 'b', 'c', 'd', 'e')]
...@@ -3982,8 +3985,8 @@ class TestHelpSubparsersOrdering(HelpTestCase): ...@@ -3982,8 +3985,8 @@ class TestHelpSubparsersOrdering(HelpTestCase):
class TestHelpSubparsersWithHelpOrdering(HelpTestCase): class TestHelpSubparsersWithHelpOrdering(HelpTestCase):
"""Test ordering of subcommands in help matches the code""" """Test ordering of subcommands in help matches the code"""
parser_signature = Sig(prog='PROG', parser_signature = Sig(prog='PROG',
description='display some subcommands', description='display some subcommands')
version='0.1') argument_signatures = [Sig('-v', '--version', action='version', version='0.1')]
subcommand_data = (('a', 'a subcommand help'), subcommand_data = (('a', 'a subcommand help'),
('b', 'b subcommand help'), ('b', 'b subcommand help'),
...@@ -4280,32 +4283,28 @@ class TestOptionalsHelpVersionActions(TestCase): ...@@ -4280,32 +4283,28 @@ class TestOptionalsHelpVersionActions(TestCase):
parser.format_help(), parser.format_help(),
self._get_error(parser.parse_args, args_str.split()).stdout) self._get_error(parser.parse_args, args_str.split()).stdout)
def assertPrintVersionExit(self, parser, args_str):
self.assertEqual(
parser.format_version(),
self._get_error(parser.parse_args, args_str.split()).stderr)
def assertArgumentParserError(self, parser, *args): def assertArgumentParserError(self, parser, *args):
self.assertRaises(ArgumentParserError, parser.parse_args, args) self.assertRaises(ArgumentParserError, parser.parse_args, args)
def test_version(self): def test_version(self):
parser = ErrorRaisingArgumentParser(version='1.0') parser = ErrorRaisingArgumentParser()
parser.add_argument('-v', '--version', action='version', version='1.0')
self.assertPrintHelpExit(parser, '-h') self.assertPrintHelpExit(parser, '-h')
self.assertPrintHelpExit(parser, '--help') self.assertPrintHelpExit(parser, '--help')
self.assertPrintVersionExit(parser, '-v') self.assertRaises(AttributeError, getattr, parser, 'format_version')
self.assertPrintVersionExit(parser, '--version')
def test_version_format(self): def test_version_format(self):
parser = ErrorRaisingArgumentParser(prog='PPP', version='%(prog)s 3.5') parser = ErrorRaisingArgumentParser(prog='PPP')
parser.add_argument('-v', '--version', action='version', version='%(prog)s 3.5')
msg = self._get_error(parser.parse_args, ['-v']).stderr msg = self._get_error(parser.parse_args, ['-v']).stderr
self.assertEqual('PPP 3.5\n', msg) self.assertEqual('PPP 3.5\n', msg)
def test_version_no_help(self): def test_version_no_help(self):
parser = ErrorRaisingArgumentParser(add_help=False, version='1.0') parser = ErrorRaisingArgumentParser(add_help=False)
parser.add_argument('-v', '--version', action='version', version='1.0')
self.assertArgumentParserError(parser, '-h') self.assertArgumentParserError(parser, '-h')
self.assertArgumentParserError(parser, '--help') self.assertArgumentParserError(parser, '--help')
self.assertPrintVersionExit(parser, '-v') self.assertRaises(AttributeError, getattr, parser, 'format_version')
self.assertPrintVersionExit(parser, '--version')
def test_version_action(self): def test_version_action(self):
parser = ErrorRaisingArgumentParser(prog='XXX') parser = ErrorRaisingArgumentParser(prog='XXX')
...@@ -4325,12 +4324,13 @@ class TestOptionalsHelpVersionActions(TestCase): ...@@ -4325,12 +4324,13 @@ class TestOptionalsHelpVersionActions(TestCase):
parser.add_argument('-x', action='help') parser.add_argument('-x', action='help')
parser.add_argument('-y', action='version') parser.add_argument('-y', action='version')
self.assertPrintHelpExit(parser, '-x') self.assertPrintHelpExit(parser, '-x')
self.assertPrintVersionExit(parser, '-y')
self.assertArgumentParserError(parser, '-v') self.assertArgumentParserError(parser, '-v')
self.assertArgumentParserError(parser, '--version') self.assertArgumentParserError(parser, '--version')
self.assertRaises(AttributeError, getattr, parser, 'format_version')
def test_help_version_extra_arguments(self): def test_help_version_extra_arguments(self):
parser = ErrorRaisingArgumentParser(version='1.0') parser = ErrorRaisingArgumentParser()
parser.add_argument('--version', action='version', version='1.0')
parser.add_argument('-x', action='store_true') parser.add_argument('-x', action='store_true')
parser.add_argument('y') parser.add_argument('y')
...@@ -4342,8 +4342,7 @@ class TestOptionalsHelpVersionActions(TestCase): ...@@ -4342,8 +4342,7 @@ class TestOptionalsHelpVersionActions(TestCase):
format = '%s %%s %s' % (prefix, suffix) format = '%s %%s %s' % (prefix, suffix)
self.assertPrintHelpExit(parser, format % '-h') self.assertPrintHelpExit(parser, format % '-h')
self.assertPrintHelpExit(parser, format % '--help') self.assertPrintHelpExit(parser, format % '--help')
self.assertPrintVersionExit(parser, format % '-v') self.assertRaises(AttributeError, getattr, parser, 'format_version')
self.assertPrintVersionExit(parser, format % '--version')
# ====================== # ======================
...@@ -4398,7 +4397,7 @@ class TestStrings(TestCase): ...@@ -4398,7 +4397,7 @@ class TestStrings(TestCase):
parser = argparse.ArgumentParser(prog='PROG') parser = argparse.ArgumentParser(prog='PROG')
string = ( string = (
"ArgumentParser(prog='PROG', usage=None, description=None, " "ArgumentParser(prog='PROG', usage=None, description=None, "
"version=None, formatter_class=%r, conflict_handler='error', " "formatter_class=%r, conflict_handler='error', "
"add_help=True)" % argparse.HelpFormatter) "add_help=True)" % argparse.HelpFormatter)
self.assertStringEqual(parser, string) self.assertStringEqual(parser, string)
...@@ -4760,13 +4759,7 @@ class TestImportStar(TestCase): ...@@ -4760,13 +4759,7 @@ class TestImportStar(TestCase):
self.assertEqual(sorted(items), sorted(argparse.__all__)) self.assertEqual(sorted(items), sorted(argparse.__all__))
def test_main(): def test_main():
# silence warnings about version argument - these are expected support.run_unittest(__name__)
with support.check_warnings(
('The "version" argument to ArgumentParser is deprecated.',
DeprecationWarning),
('The (format|print)_version method is deprecated',
DeprecationWarning)):
support.run_unittest(__name__)
# Remove global references to avoid looking like we have refleaks. # Remove global references to avoid looking like we have refleaks.
RFile.seen = {} RFile.seen = {}
WFile.seen = set() WFile.seen = set()
......
...@@ -23,6 +23,8 @@ Core and Builtins ...@@ -23,6 +23,8 @@ Core and Builtins
Library Library
------- -------
- Issue #13248: Remove obsolete argument "version" of argparse.ArgumentParser.
- Issue #14814: implement more consistent ordering and sorting behaviour - Issue #14814: implement more consistent ordering and sorting behaviour
for ipaddress objects for ipaddress objects
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment