Make argparse._SubParsersAction generic (#6178)

This commit is contained in:
Omer Ozarslan
2021-10-15 16:36:46 -05:00
committed by GitHub
parent 3ba8c50d92
commit f3a345493c

View File

@@ -1,8 +1,24 @@
import sys
from typing import IO, Any, Callable, Generator, Iterable, NoReturn, Pattern, Protocol, Sequence, Tuple, Type, TypeVar, overload
from typing import (
IO,
Any,
Callable,
Generator,
Generic,
Iterable,
NoReturn,
Pattern,
Protocol,
Sequence,
Tuple,
Type,
TypeVar,
overload,
)
_T = TypeVar("_T")
_ActionT = TypeVar("_ActionT", bound=Action)
_ArgumentParserT = TypeVar("_ArgumentParserT", bound=ArgumentParser)
_N = TypeVar("_N")
ONE_OR_MORE: str
@@ -135,34 +151,63 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer):
@overload
def parse_args(self, *, namespace: _N) -> _N: ...
if sys.version_info >= (3, 7):
@overload
def add_subparsers(
self,
self: _ArgumentParserT,
*,
title: str = ...,
description: str | None = ...,
prog: str = ...,
parser_class: Type[ArgumentParser] = ...,
action: Type[Action] = ...,
option_string: str = ...,
dest: str | None = ...,
required: bool = ...,
help: str | None = ...,
metavar: str | None = ...,
) -> _SubParsersAction: ...
else:
) -> _SubParsersAction[_ArgumentParserT]: ...
@overload
def add_subparsers(
self,
*,
title: str = ...,
description: str | None = ...,
prog: str = ...,
parser_class: Type[ArgumentParser] = ...,
parser_class: Type[_ArgumentParserT] = ...,
action: Type[Action] = ...,
option_string: str = ...,
dest: str | None = ...,
required: bool = ...,
help: str | None = ...,
metavar: str | None = ...,
) -> _SubParsersAction[_ArgumentParserT]: ...
else:
@overload
def add_subparsers(
self: _ArgumentParserT,
*,
title: str = ...,
description: str | None = ...,
prog: str = ...,
action: Type[Action] = ...,
option_string: str = ...,
dest: str | None = ...,
help: str | None = ...,
metavar: str | None = ...,
) -> _SubParsersAction: ...
) -> _SubParsersAction[_ArgumentParserT]: ...
@overload
def add_subparsers(
self,
*,
title: str = ...,
description: str | None = ...,
prog: str = ...,
parser_class: Type[_ArgumentParserT] = ...,
action: Type[Action] = ...,
option_string: str = ...,
dest: str | None = ...,
help: str | None = ...,
metavar: str | None = ...,
) -> _SubParsersAction[_ArgumentParserT]: ...
def print_usage(self, file: IO[str] | None = ...) -> None: ...
def print_help(self, file: IO[str] | None = ...) -> None: ...
def format_usage(self) -> str: ...
@@ -379,19 +424,19 @@ class _VersionAction(Action):
) -> None: ...
# undocumented
class _SubParsersAction(Action):
class _SubParsersAction(Action, Generic[_ArgumentParserT]):
_ChoicesPseudoAction: Type[Any] # nested class
_prog_prefix: str
_parser_class: Type[ArgumentParser]
_name_parser_map: dict[str, ArgumentParser]
choices: dict[str, ArgumentParser]
_parser_class: Type[_ArgumentParserT]
_name_parser_map: dict[str, _ArgumentParserT]
choices: dict[str, _ArgumentParserT]
_choices_actions: list[Action]
if sys.version_info >= (3, 7):
def __init__(
self,
option_strings: Sequence[str],
prog: str,
parser_class: Type[ArgumentParser],
parser_class: Type[_ArgumentParserT],
dest: str = ...,
required: bool = ...,
help: str | None = ...,
@@ -402,13 +447,13 @@ class _SubParsersAction(Action):
self,
option_strings: Sequence[str],
prog: str,
parser_class: Type[ArgumentParser],
parser_class: Type[_ArgumentParserT],
dest: str = ...,
help: str | None = ...,
metavar: str | Tuple[str, ...] | None = ...,
) -> None: ...
# TODO: Type keyword args properly.
def add_parser(self, name: str, **kwargs: Any) -> ArgumentParser: ...
def add_parser(self, name: str, **kwargs: Any) -> _ArgumentParserT: ...
def _get_subactions(self) -> list[Action]: ...
# undocumented