summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2018-05-24 02:22:46 (GMT)
committerNed Deily <nad@python.org>2018-05-24 02:22:46 (GMT)
commitdd7a255911f364cf521676082a89d4cac307737e (patch)
tree33a5b6d5f3a0d2e68bead61ee27325caf5223c4a
parentfa286edbde9ed660d99628aea14ee3b824c2afe6 (diff)
downloadcpython-dd7a255911f364cf521676082a89d4cac307737e.zip
cpython-dd7a255911f364cf521676082a89d4cac307737e.tar.gz
cpython-dd7a255911f364cf521676082a89d4cac307737e.tar.bz2
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 8ebf5ceb0f5408d1ebc26c19702ac0762ef5ea04) Co-authored-by: Ned Deily <nad@python.org>
-rw-r--r--Doc/library/argparse.rst2
-rw-r--r--Lib/argparse.py2
-rw-r--r--Lib/test/test_argparse.py4
-rw-r--r--Misc/NEWS.d/3.7.0a2.rst2
-rw-r--r--Misc/NEWS.d/next/Library/2018-05-16-14-57-58.bpo-33109.nPLL_S.rst2
5 files changed, 9 insertions, 3 deletions
diff --git a/Doc/library/argparse.rst b/Doc/library/argparse.rst
index 3f327c0..260e5cb 100644
--- a/Doc/library/argparse.rst
+++ b/Doc/library/argparse.rst
@@ -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``
diff --git a/Lib/argparse.py b/Lib/argparse.py
index e3da7f0..e0e367b 100644
--- a/Lib/argparse.py
+++ b/Lib/argparse.py
@@ -1077,7 +1077,7 @@ class _SubParsersAction(Action):
prog,
parser_class,
dest=SUPPRESS,
- required=True,
+ required=False,
help=None,
metavar=None):
diff --git a/Lib/test/test_argparse.py b/Lib/test/test_argparse.py
index c4440e4..bcf15ce 100644
--- a/Lib/test/test_argparse.py
+++ b/Lib/test/test_argparse.py
@@ -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()
diff --git a/Misc/NEWS.d/3.7.0a2.rst b/Misc/NEWS.d/3.7.0a2.rst
index 190038d..621de6d 100644
--- a/Misc/NEWS.d/3.7.0a2.rst
+++ b/Misc/NEWS.d/3.7.0a2.rst
@@ -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.)
..
diff --git a/Misc/NEWS.d/next/Library/2018-05-16-14-57-58.bpo-33109.nPLL_S.rst b/Misc/NEWS.d/next/Library/2018-05-16-14-57-58.bpo-33109.nPLL_S.rst
new file mode 100644
index 0000000..be731f9
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-05-16-14-57-58.bpo-33109.nPLL_S.rst
@@ -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.