mirror of
https://github.com/python/cpython.git
synced 2025-01-23 01:32:36 +08:00
gh-92248: Deprecate type
, choices
, metavar
parameters of argparse.BooleanOptionalAction
(#103678)
Co-authored-by: Kirill <80244920+Eclips4@users.noreply.github.com> Co-authored-by: Hugo van Kemenade <hugovk@users.noreply.github.com> Co-authored-by: Oleg Iarygin <oleg@arhadthedev.net>
This commit is contained in:
parent
ac56a854b4
commit
27a7d5e1cd
@ -870,6 +870,11 @@ Pending Removal in Python 3.14
|
|||||||
* The *onerror* argument of :func:`shutil.rmtree` is deprecated in 3.12,
|
* The *onerror* argument of :func:`shutil.rmtree` is deprecated in 3.12,
|
||||||
and will be removed in 3.14.
|
and will be removed in 3.14.
|
||||||
|
|
||||||
|
* The *type*, *choices*, and *metavar* parameters
|
||||||
|
of :class:`!argparse.BooleanOptionalAction` are deprecated
|
||||||
|
and will be removed in 3.14.
|
||||||
|
(Contributed by Nikita Sobolev in :gh:`92248`.)
|
||||||
|
|
||||||
* :func:`pkgutil.find_loader` and :func:`pkgutil.get_loader`
|
* :func:`pkgutil.find_loader` and :func:`pkgutil.get_loader`
|
||||||
now raise :exc:`DeprecationWarning`;
|
now raise :exc:`DeprecationWarning`;
|
||||||
use :func:`importlib.util.find_spec` instead.
|
use :func:`importlib.util.find_spec` instead.
|
||||||
|
@ -883,16 +883,19 @@ class Action(_AttributeHolder):
|
|||||||
raise NotImplementedError(_('.__call__() not defined'))
|
raise NotImplementedError(_('.__call__() not defined'))
|
||||||
|
|
||||||
|
|
||||||
|
# FIXME: remove together with `BooleanOptionalAction` deprecated arguments.
|
||||||
|
_deprecated_default = object()
|
||||||
|
|
||||||
class BooleanOptionalAction(Action):
|
class BooleanOptionalAction(Action):
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
option_strings,
|
option_strings,
|
||||||
dest,
|
dest,
|
||||||
default=None,
|
default=None,
|
||||||
type=None,
|
type=_deprecated_default,
|
||||||
choices=None,
|
choices=_deprecated_default,
|
||||||
required=False,
|
required=False,
|
||||||
help=None,
|
help=None,
|
||||||
metavar=None):
|
metavar=_deprecated_default):
|
||||||
|
|
||||||
_option_strings = []
|
_option_strings = []
|
||||||
for option_string in option_strings:
|
for option_string in option_strings:
|
||||||
@ -902,6 +905,24 @@ class BooleanOptionalAction(Action):
|
|||||||
option_string = '--no-' + option_string[2:]
|
option_string = '--no-' + option_string[2:]
|
||||||
_option_strings.append(option_string)
|
_option_strings.append(option_string)
|
||||||
|
|
||||||
|
# We need `_deprecated` special value to ban explicit arguments that
|
||||||
|
# match default value. Like:
|
||||||
|
# parser.add_argument('-f', action=BooleanOptionalAction, type=int)
|
||||||
|
for field_name in ('type', 'choices', 'metavar'):
|
||||||
|
if locals()[field_name] is not _deprecated_default:
|
||||||
|
warnings._deprecated(
|
||||||
|
field_name,
|
||||||
|
"{name!r} is deprecated as of Python 3.12 and will be "
|
||||||
|
"removed in Python {remove}.",
|
||||||
|
remove=(3, 14))
|
||||||
|
|
||||||
|
if type is _deprecated_default:
|
||||||
|
type = None
|
||||||
|
if choices is _deprecated_default:
|
||||||
|
choices = None
|
||||||
|
if metavar is _deprecated_default:
|
||||||
|
metavar = None
|
||||||
|
|
||||||
super().__init__(
|
super().__init__(
|
||||||
option_strings=_option_strings,
|
option_strings=_option_strings,
|
||||||
dest=dest,
|
dest=dest,
|
||||||
|
@ -765,6 +765,49 @@ class TestBooleanOptionalAction(ParserTestCase):
|
|||||||
|
|
||||||
self.assertIn("got an unexpected keyword argument 'const'", str(cm.exception))
|
self.assertIn("got an unexpected keyword argument 'const'", str(cm.exception))
|
||||||
|
|
||||||
|
def test_deprecated_init_kw(self):
|
||||||
|
# See gh-92248
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
|
||||||
|
with self.assertWarns(DeprecationWarning):
|
||||||
|
parser.add_argument(
|
||||||
|
'-a',
|
||||||
|
action=argparse.BooleanOptionalAction,
|
||||||
|
type=None,
|
||||||
|
)
|
||||||
|
with self.assertWarns(DeprecationWarning):
|
||||||
|
parser.add_argument(
|
||||||
|
'-b',
|
||||||
|
action=argparse.BooleanOptionalAction,
|
||||||
|
type=bool,
|
||||||
|
)
|
||||||
|
|
||||||
|
with self.assertWarns(DeprecationWarning):
|
||||||
|
parser.add_argument(
|
||||||
|
'-c',
|
||||||
|
action=argparse.BooleanOptionalAction,
|
||||||
|
metavar=None,
|
||||||
|
)
|
||||||
|
with self.assertWarns(DeprecationWarning):
|
||||||
|
parser.add_argument(
|
||||||
|
'-d',
|
||||||
|
action=argparse.BooleanOptionalAction,
|
||||||
|
metavar='d',
|
||||||
|
)
|
||||||
|
|
||||||
|
with self.assertWarns(DeprecationWarning):
|
||||||
|
parser.add_argument(
|
||||||
|
'-e',
|
||||||
|
action=argparse.BooleanOptionalAction,
|
||||||
|
choices=None,
|
||||||
|
)
|
||||||
|
with self.assertWarns(DeprecationWarning):
|
||||||
|
parser.add_argument(
|
||||||
|
'-f',
|
||||||
|
action=argparse.BooleanOptionalAction,
|
||||||
|
choices=(),
|
||||||
|
)
|
||||||
|
|
||||||
class TestBooleanOptionalActionRequired(ParserTestCase):
|
class TestBooleanOptionalActionRequired(ParserTestCase):
|
||||||
"""Tests BooleanOptionalAction required"""
|
"""Tests BooleanOptionalAction required"""
|
||||||
|
|
||||||
|
@ -0,0 +1,2 @@
|
|||||||
|
Deprecate ``type``, ``choices``, and ``metavar`` parameters of
|
||||||
|
``argparse.BooleanOptionalAction``.
|
Loading…
Reference in New Issue
Block a user