mirror of
https://github.com/python/cpython.git
synced 2025-08-09 19:38:42 +00:00
Issue #9026: Fix order of argparse sub-commands in help messages. (Merged from 3.2.)
This commit is contained in:
parent
49b0ce06f0
commit
bc3b104e46
3 changed files with 84 additions and 4 deletions
|
@ -82,6 +82,7 @@ __all__ = [
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
import collections as _collections
|
||||||
import copy as _copy
|
import copy as _copy
|
||||||
import os as _os
|
import os as _os
|
||||||
import re as _re
|
import re as _re
|
||||||
|
@ -1037,7 +1038,7 @@ class _SubParsersAction(Action):
|
||||||
|
|
||||||
self._prog_prefix = prog
|
self._prog_prefix = prog
|
||||||
self._parser_class = parser_class
|
self._parser_class = parser_class
|
||||||
self._name_parser_map = {}
|
self._name_parser_map = _collections.OrderedDict()
|
||||||
self._choices_actions = []
|
self._choices_actions = []
|
||||||
|
|
||||||
super(_SubParsersAction, self).__init__(
|
super(_SubParsersAction, self).__init__(
|
||||||
|
|
|
@ -2802,16 +2802,22 @@ class TestHelpFormattingMetaclass(type):
|
||||||
parser = argparse.ArgumentParser(
|
parser = argparse.ArgumentParser(
|
||||||
*tester.parser_signature.args,
|
*tester.parser_signature.args,
|
||||||
**tester.parser_signature.kwargs)
|
**tester.parser_signature.kwargs)
|
||||||
for argument_sig in tester.argument_signatures:
|
for argument_sig in getattr(tester, 'argument_signatures', []):
|
||||||
parser.add_argument(*argument_sig.args,
|
parser.add_argument(*argument_sig.args,
|
||||||
**argument_sig.kwargs)
|
**argument_sig.kwargs)
|
||||||
group_signatures = tester.argument_group_signatures
|
group_sigs = getattr(tester, 'argument_group_signatures', [])
|
||||||
for group_sig, argument_sigs in group_signatures:
|
for group_sig, argument_sigs in group_sigs:
|
||||||
group = parser.add_argument_group(*group_sig.args,
|
group = parser.add_argument_group(*group_sig.args,
|
||||||
**group_sig.kwargs)
|
**group_sig.kwargs)
|
||||||
for argument_sig in argument_sigs:
|
for argument_sig in argument_sigs:
|
||||||
group.add_argument(*argument_sig.args,
|
group.add_argument(*argument_sig.args,
|
||||||
**argument_sig.kwargs)
|
**argument_sig.kwargs)
|
||||||
|
subparsers_sigs = getattr(tester, 'subparsers_signatures', [])
|
||||||
|
if subparsers_sigs:
|
||||||
|
subparsers = parser.add_subparsers()
|
||||||
|
for subparser_sig in subparsers_sigs:
|
||||||
|
subparsers.add_parser(*subparser_sig.args,
|
||||||
|
**subparser_sig.kwargs)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
def _test(self, tester, parser_text):
|
def _test(self, tester, parser_text):
|
||||||
|
@ -3905,6 +3911,77 @@ class TestHelpVersionAction(HelpTestCase):
|
||||||
'''
|
'''
|
||||||
version = ''
|
version = ''
|
||||||
|
|
||||||
|
class TestHelpSubparsersOrdering(HelpTestCase):
|
||||||
|
"""Test ordering of subcommands in help matches the code"""
|
||||||
|
parser_signature = Sig(prog='PROG',
|
||||||
|
description='display some subcommands',
|
||||||
|
version='0.1')
|
||||||
|
|
||||||
|
subparsers_signatures = [Sig(name=name)
|
||||||
|
for name in ('a', 'b', 'c', 'd', 'e')]
|
||||||
|
|
||||||
|
usage = '''\
|
||||||
|
usage: PROG [-h] [-v] {a,b,c,d,e} ...
|
||||||
|
'''
|
||||||
|
|
||||||
|
help = usage + '''\
|
||||||
|
|
||||||
|
display some subcommands
|
||||||
|
|
||||||
|
positional arguments:
|
||||||
|
{a,b,c,d,e}
|
||||||
|
|
||||||
|
optional arguments:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
-v, --version show program's version number and exit
|
||||||
|
'''
|
||||||
|
|
||||||
|
version = '''\
|
||||||
|
0.1
|
||||||
|
'''
|
||||||
|
|
||||||
|
class TestHelpSubparsersWithHelpOrdering(HelpTestCase):
|
||||||
|
"""Test ordering of subcommands in help matches the code"""
|
||||||
|
parser_signature = Sig(prog='PROG',
|
||||||
|
description='display some subcommands',
|
||||||
|
version='0.1')
|
||||||
|
|
||||||
|
subcommand_data = (('a', 'a subcommand help'),
|
||||||
|
('b', 'b subcommand help'),
|
||||||
|
('c', 'c subcommand help'),
|
||||||
|
('d', 'd subcommand help'),
|
||||||
|
('e', 'e subcommand help'),
|
||||||
|
)
|
||||||
|
|
||||||
|
subparsers_signatures = [Sig(name=name, help=help)
|
||||||
|
for name, help in subcommand_data]
|
||||||
|
|
||||||
|
usage = '''\
|
||||||
|
usage: PROG [-h] [-v] {a,b,c,d,e} ...
|
||||||
|
'''
|
||||||
|
|
||||||
|
help = usage + '''\
|
||||||
|
|
||||||
|
display some subcommands
|
||||||
|
|
||||||
|
positional arguments:
|
||||||
|
{a,b,c,d,e}
|
||||||
|
a a subcommand help
|
||||||
|
b b subcommand help
|
||||||
|
c c subcommand help
|
||||||
|
d d subcommand help
|
||||||
|
e e subcommand help
|
||||||
|
|
||||||
|
optional arguments:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
-v, --version show program's version number and exit
|
||||||
|
'''
|
||||||
|
|
||||||
|
version = '''\
|
||||||
|
0.1
|
||||||
|
'''
|
||||||
|
|
||||||
|
|
||||||
# =====================================
|
# =====================================
|
||||||
# Optional/Positional constructor tests
|
# Optional/Positional constructor tests
|
||||||
# =====================================
|
# =====================================
|
||||||
|
|
|
@ -244,6 +244,8 @@ Library
|
||||||
- Issue #9343: Document that argparse parent parsers must be configured before
|
- Issue #9343: Document that argparse parent parsers must be configured before
|
||||||
their children.
|
their children.
|
||||||
|
|
||||||
|
- Issue #9026: Fix order of argparse sub-commands in help messages.
|
||||||
|
|
||||||
Extension Modules
|
Extension Modules
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue