summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSavannah Ostrowski <savannahostrowski@gmail.com>2024-10-17 09:11:47 (GMT)
committerGitHub <noreply@github.com>2024-10-17 09:11:47 (GMT)
commit7b04496e5c7ed47e9653f4591674fc9ffef34587 (patch)
treef3019e1f0a4db53faeb70ac91aa0d230efb400eb
parent624be8699aec22bef137041478078c6fafaf032e (diff)
downloadcpython-7b04496e5c7ed47e9653f4591674fc9ffef34587.zip
cpython-7b04496e5c7ed47e9653f4591674fc9ffef34587.tar.gz
cpython-7b04496e5c7ed47e9653f4591674fc9ffef34587.tar.bz2
gh-125542: Deprecate prefix_chars in ArgumentParser.add_argument_group() (GH-125563)
-rw-r--r--Doc/deprecations/pending-removal-in-future.rst9
-rw-r--r--Doc/library/argparse.rst4
-rw-r--r--Doc/whatsnew/3.14.rst6
-rw-r--r--Lib/argparse.py8
-rw-r--r--Lib/test/test_argparse.py25
-rw-r--r--Misc/NEWS.d/next/Library/2024-10-16-04-50-53.gh-issue-125542.vZJ-Ns.rst2
6 files changed, 52 insertions, 2 deletions
diff --git a/Doc/deprecations/pending-removal-in-future.rst b/Doc/deprecations/pending-removal-in-future.rst
index f916797..d77fc86 100644
--- a/Doc/deprecations/pending-removal-in-future.rst
+++ b/Doc/deprecations/pending-removal-in-future.rst
@@ -4,8 +4,13 @@ Pending removal in future versions
The following APIs will be removed in the future,
although there is currently no date scheduled for their removal.
-* :mod:`argparse`: Nesting argument groups and nesting mutually exclusive
- groups are deprecated.
+* :mod:`argparse`:
+
+ * Nesting argument groups and nesting mutually exclusive
+ groups are deprecated.
+ * Passing the undocumented keyword argument *prefix_chars* to
+ :meth:`~argparse.ArgumentParser.add_argument_group` is now
+ deprecated.
* :mod:`array`'s ``'u'`` format code (:gh:`57281`)
diff --git a/Doc/library/argparse.rst b/Doc/library/argparse.rst
index ee8562b..ef0db3e 100644
--- a/Doc/library/argparse.rst
+++ b/Doc/library/argparse.rst
@@ -1894,6 +1894,10 @@ Argument groups
The function exists on the API by accident through inheritance and
will be removed in the future.
+ .. deprecated:: 3.14
+ Passing prefix_chars_ to :meth:`add_argument_group`
+ is now deprecated.
+
Mutual exclusion
^^^^^^^^^^^^^^^^
diff --git a/Doc/whatsnew/3.14.rst b/Doc/whatsnew/3.14.rst
index 9543af3..feb65f2 100644
--- a/Doc/whatsnew/3.14.rst
+++ b/Doc/whatsnew/3.14.rst
@@ -428,6 +428,12 @@ asyncio
Deprecated
==========
+* :mod:`argparse`:
+ Passing the undocumented keyword argument *prefix_chars* to
+ :meth:`~argparse.ArgumentParser.add_argument_group` is now
+ deprecated.
+ (Contributed by Savannah Ostrowski in :gh:`125563`.)
+
* :mod:`asyncio`:
:func:`!asyncio.iscoroutinefunction` is deprecated
and will be removed in Python 3.16,
diff --git a/Lib/argparse.py b/Lib/argparse.py
index ece6f2e..49271a1 100644
--- a/Lib/argparse.py
+++ b/Lib/argparse.py
@@ -1662,6 +1662,14 @@ class _ActionsContainer(object):
class _ArgumentGroup(_ActionsContainer):
def __init__(self, container, title=None, description=None, **kwargs):
+ if 'prefix_chars' in kwargs:
+ import warnings
+ depr_msg = (
+ "The use of the undocumented 'prefix_chars' parameter in "
+ "ArgumentParser.add_argument_group() is deprecated."
+ )
+ warnings.warn(depr_msg, DeprecationWarning, stacklevel=3)
+
# add any missing keyword arguments by checking the container
update = kwargs.setdefault
update('conflict_handler', container.conflict_handler)
diff --git a/Lib/test/test_argparse.py b/Lib/test/test_argparse.py
index a3c096e..4fa6697 100644
--- a/Lib/test/test_argparse.py
+++ b/Lib/test/test_argparse.py
@@ -2893,6 +2893,31 @@ class TestPositionalsGroups(TestCase):
result = parser.parse_args('1 2 3 4'.split())
self.assertEqual(expected, result)
+class TestGroupConstructor(TestCase):
+ def test_group_prefix_chars(self):
+ parser = ErrorRaisingArgumentParser()
+ msg = (
+ "The use of the undocumented 'prefix_chars' parameter in "
+ "ArgumentParser.add_argument_group() is deprecated."
+ )
+ with self.assertWarns(DeprecationWarning) as cm:
+ parser.add_argument_group(prefix_chars='-+')
+ self.assertEqual(msg, str(cm.warning))
+ self.assertEqual(cm.filename, __file__)
+
+ def test_group_prefix_chars_default(self):
+ # "default" isn't quite the right word here, but it's the same as
+ # the parser's default prefix so it's a good test
+ parser = ErrorRaisingArgumentParser()
+ msg = (
+ "The use of the undocumented 'prefix_chars' parameter in "
+ "ArgumentParser.add_argument_group() is deprecated."
+ )
+ with self.assertWarns(DeprecationWarning) as cm:
+ parser.add_argument_group(prefix_chars='-')
+ self.assertEqual(msg, str(cm.warning))
+ self.assertEqual(cm.filename, __file__)
+
# ===================
# Parent parser tests
# ===================
diff --git a/Misc/NEWS.d/next/Library/2024-10-16-04-50-53.gh-issue-125542.vZJ-Ns.rst b/Misc/NEWS.d/next/Library/2024-10-16-04-50-53.gh-issue-125542.vZJ-Ns.rst
new file mode 100644
index 0000000..777920c
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2024-10-16-04-50-53.gh-issue-125542.vZJ-Ns.rst
@@ -0,0 +1,2 @@
+Deprecate passing keyword-only *prefix_chars* argument to
+:meth:`argparse.ArgumentParser.add_argument_group`.