Skip to content

Commit

Permalink
pythongh-125542: Deprecate prefix_chars in ArgumentParser.add_argumen…
Browse files Browse the repository at this point in the history
…t_group() (pythonGH-125563)
  • Loading branch information
savannahostrowski authored Oct 17, 2024
1 parent 624be86 commit 7b04496
Show file tree
Hide file tree
Showing 6 changed files with 52 additions and 2 deletions.
9 changes: 7 additions & 2 deletions Doc/deprecations/pending-removal-in-future.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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`)

Expand Down
4 changes: 4 additions & 0 deletions Doc/library/argparse.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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
^^^^^^^^^^^^^^^^
Expand Down
6 changes: 6 additions & 0 deletions Doc/whatsnew/3.14.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
8 changes: 8 additions & 0 deletions Lib/argparse.py
Original file line number Diff line number Diff line change
Expand Up @@ -1662,6 +1662,14 @@ def _check_help(self, action):
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)
Expand Down
25 changes: 25 additions & 0 deletions Lib/test/test_argparse.py
Original file line number Diff line number Diff line change
Expand Up @@ -2893,6 +2893,31 @@ def test_interleaved_groups(self):
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
# ===================
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Deprecate passing keyword-only *prefix_chars* argument to
:meth:`argparse.ArgumentParser.add_argument_group`.

0 comments on commit 7b04496

Please sign in to comment.