bpo-33109: argparse subparsers are once again not required by default (GH-6919) (GH-7089)

bpo-26510 in 3.7.0a2 changed the behavior of argparse to make
subparsers required by default, returning to the behavior of 2.7
and 3.2. The behavior was changed in 3.3 to be no longer required.
While it might make more sense to have the default to required,
compatibility with 3.3 through 3.6 is probably less disruptive
than trying to reintroduce compatibility with 2.7 at this point.
This change restores the 3.6 behavior.
(cherry picked from commit 8ebf5ceb0f)

Co-authored-by: Ned Deily <nad@python.org>
This commit is contained in:
Miss Islington (bot) 2018-05-23 19:22:46 -07:00 committed by Ned Deily
parent fa286edbde
commit dd7a255911
5 changed files with 9 additions and 3 deletions

View File

@ -1577,7 +1577,7 @@ Sub-commands
stored; by default ``None`` and no value is stored
* required_ - Whether or not a subcommand must be provided, by default
``True``.
``False``.
* help_ - help for sub-parser group in help output, by default ``None``

View File

@ -1077,7 +1077,7 @@ class _SubParsersAction(Action):
prog,
parser_class,
dest=SUPPRESS,
required=True,
required=False,
help=None,
metavar=None):

View File

@ -1932,7 +1932,9 @@ class TestAddSubparsers(TestCase):
parser = ErrorRaisingArgumentParser()
subparsers = parser.add_subparsers(dest='command')
subparsers.add_parser('run')
self._test_required_subparsers(parser)
# No error here
ret = parser.parse_args(())
self.assertIsNone(ret.command)
def test_optional_subparsers(self):
parser = ErrorRaisingArgumentParser()

View File

@ -477,6 +477,8 @@ module now requires sqlite version at least 3.3.9.
argparse subparsers are now required by default. This matches behaviour in
Python 2. For optional subparsers, use the new parameter
``add_subparsers(required=False)``. Patch by Anthony Sottile.
(As of 3.7.0rc1, the default was changed to not required as had been the case
since Python 3.3.)
..

View File

@ -0,0 +1,2 @@
argparse subparsers are once again not required by default, reverting the
change in behavior introduced by bpo-26510 in 3.7.0a2.