mirror of
https://github.com/python/cpython.git
synced 2025-08-04 17:08:35 +00: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
4 changed files with 74 additions and 3 deletions
|
@ -883,16 +883,19 @@ class Action(_AttributeHolder):
|
|||
raise NotImplementedError(_('.__call__() not defined'))
|
||||
|
||||
|
||||
# FIXME: remove together with `BooleanOptionalAction` deprecated arguments.
|
||||
_deprecated_default = object()
|
||||
|
||||
class BooleanOptionalAction(Action):
|
||||
def __init__(self,
|
||||
option_strings,
|
||||
dest,
|
||||
default=None,
|
||||
type=None,
|
||||
choices=None,
|
||||
type=_deprecated_default,
|
||||
choices=_deprecated_default,
|
||||
required=False,
|
||||
help=None,
|
||||
metavar=None):
|
||||
metavar=_deprecated_default):
|
||||
|
||||
_option_strings = []
|
||||
for option_string in option_strings:
|
||||
|
@ -902,6 +905,24 @@ class BooleanOptionalAction(Action):
|
|||
option_string = '--no-' + option_string[2:]
|
||||
_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__(
|
||||
option_strings=_option_strings,
|
||||
dest=dest,
|
||||
|
|
|
@ -765,6 +765,49 @@ class TestBooleanOptionalAction(ParserTestCase):
|
|||
|
||||
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):
|
||||
"""Tests BooleanOptionalAction required"""
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue