From 6ffa4ab4d7b8da4dcc8ddda49bc9bc6588149e42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edgar=20Ram=C3=ADrez=20Mondrag=C3=B3n?= Date: Mon, 5 May 2025 19:36:06 -0600 Subject: [PATCH 1/4] Add new Python 3.14 `argparse.ArgumentParser` parameters These are - `suggest_on_error`, added by https://github.com/python/cpython/pull/124456, made keyword-only by https://github.com/python/cpython/pull/133302 - `color`, added by https://github.com/python/cpython/pull/132323 --- stdlib/argparse.pyi | 80 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 64 insertions(+), 16 deletions(-) diff --git a/stdlib/argparse.pyi b/stdlib/argparse.pyi index 32beaff14696..6c050d9e958c 100644 --- a/stdlib/argparse.pyi +++ b/stdlib/argparse.pyi @@ -130,22 +130,44 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): _subparsers: _ArgumentGroup | None # Note: the constructor arguments are also used in _SubParsersAction.add_parser. - def __init__( - self, - prog: str | None = None, - usage: str | None = None, - description: str | None = None, - epilog: str | None = None, - parents: Sequence[ArgumentParser] = [], - formatter_class: _FormatterClass = ..., - prefix_chars: str = "-", - fromfile_prefix_chars: str | None = None, - argument_default: Any = None, - conflict_handler: str = "error", - add_help: bool = True, - allow_abbrev: bool = True, - exit_on_error: bool = True, - ) -> None: ... + if sys.version_info >= (3, 14): + def __init__( + self, + prog: str | None = None, + usage: str | None = None, + description: str | None = None, + epilog: str | None = None, + parents: Sequence[ArgumentParser] = [], + formatter_class: _FormatterClass = ..., + prefix_chars: str = "-", + fromfile_prefix_chars: str | None = None, + argument_default: Any = None, + conflict_handler: str = "error", + add_help: bool = True, + allow_abbrev: bool = True, + exit_on_error: bool = True, + *, + suggest_on_error: bool = False, + color: bool = False, + ) -> None: ... + else: + def __init__( + self, + prog: str | None = None, + usage: str | None = None, + description: str | None = None, + epilog: str | None = None, + parents: Sequence[ArgumentParser] = [], + formatter_class: _FormatterClass = ..., + prefix_chars: str = "-", + fromfile_prefix_chars: str | None = None, + argument_default: Any = None, + conflict_handler: str = "error", + add_help: bool = True, + allow_abbrev: bool = True, + exit_on_error: bool = True, + ) -> None: ... + @overload def parse_args(self, args: Sequence[str] | None = None, namespace: None = None) -> Namespace: ... @overload @@ -668,6 +690,32 @@ class _SubParsersAction(Action, Generic[_ArgumentParserT]): # Note: `add_parser` accepts all kwargs of `ArgumentParser.__init__`. It also # accepts its own `help` and `aliases` kwargs. + if sys.version_info >= (3, 14): + def add_parser( + self, + name: str, + *, + deprecated: bool = False, + help: str | None = ..., + aliases: Sequence[str] = ..., + # Kwargs from ArgumentParser constructor + prog: str | None = ..., + usage: str | None = ..., + description: str | None = ..., + epilog: str | None = ..., + parents: Sequence[_ArgumentParserT] = ..., + formatter_class: _FormatterClass = ..., + prefix_chars: str = ..., + fromfile_prefix_chars: str | None = ..., + argument_default: Any = ..., + conflict_handler: str = ..., + add_help: bool = ..., + allow_abbrev: bool = ..., + exit_on_error: bool = ..., + suggest_on_error: bool = ..., + color: bool = ..., + **kwargs: Any, # Accepting any additional kwargs for custom parser classes + ) -> _ArgumentParserT: ... if sys.version_info >= (3, 13): def add_parser( self, From 271997fc4c76a4ad8c1710d8be2b3d760b9cb6e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edgar=20Ram=C3=ADrez=20Mondrag=C3=B3n?= Date: Mon, 5 May 2025 19:41:50 -0600 Subject: [PATCH 2/4] Annotate instance attributes --- stdlib/argparse.pyi | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/stdlib/argparse.pyi b/stdlib/argparse.pyi index 6c050d9e958c..fc266e1fdc64 100644 --- a/stdlib/argparse.pyi +++ b/stdlib/argparse.pyi @@ -123,6 +123,11 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): fromfile_prefix_chars: str | None add_help: bool allow_abbrev: bool + exit_on_error: bool + + if sys.version_info >= (3, 14): + suggest_on_error: bool + color: bool # undocumented _positionals: _ArgumentGroup From 98b2340229603a58bca0b40eac372f4cf2308866 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edgar=20Ram=C3=ADrez=20Mondrag=C3=B3n?= Date: Sun, 11 May 2025 21:18:52 -0600 Subject: [PATCH 3/4] Add defaults to `add_parser` Co-authored-by: Jelle Zijlstra --- stdlib/argparse.pyi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stdlib/argparse.pyi b/stdlib/argparse.pyi index fc266e1fdc64..b1dcc1753714 100644 --- a/stdlib/argparse.pyi +++ b/stdlib/argparse.pyi @@ -717,8 +717,8 @@ class _SubParsersAction(Action, Generic[_ArgumentParserT]): add_help: bool = ..., allow_abbrev: bool = ..., exit_on_error: bool = ..., - suggest_on_error: bool = ..., - color: bool = ..., + suggest_on_error: bool = False, + color: bool = False, **kwargs: Any, # Accepting any additional kwargs for custom parser classes ) -> _ArgumentParserT: ... if sys.version_info >= (3, 13): From 6b6659c886f3f06b7afd83ebc1d45f70f9af07db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edgar=20Ram=C3=ADrez-Mondrag=C3=B3n?= Date: Sun, 11 May 2025 21:28:07 -0600 Subject: [PATCH 4/4] =?UTF-8?q?`if`=C2=A0->=20`elif`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- stdlib/argparse.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/argparse.pyi b/stdlib/argparse.pyi index daf4af6bfb03..95ad6c7da8eb 100644 --- a/stdlib/argparse.pyi +++ b/stdlib/argparse.pyi @@ -751,7 +751,7 @@ class _SubParsersAction(Action, Generic[_ArgumentParserT]): color: bool = False, **kwargs: Any, # Accepting any additional kwargs for custom parser classes ) -> _ArgumentParserT: ... - if sys.version_info >= (3, 13): + elif sys.version_info >= (3, 13): def add_parser( self, name: str,