11"""A generic command."""
22
33import argparse
4+ import sys
45from abc import ABC , abstractmethod
5- from typing import Any , Type , TypeVar , cast # pylint: disable=unused-import
6+ from argparse import ArgumentParser # pylint: disable=unused-import
7+ from typing import TYPE_CHECKING , Type , TypeVar
8+
9+ if TYPE_CHECKING and sys .version_info >= (3 , 10 ):
10+ from typing import TypeAlias
11+
12+ SubparserActionType : TypeAlias = (
13+ "argparse._SubParsersAction[ArgumentParser]" # pyright: ignore[reportPrivateUsage] #pylint: disable=protected-access
14+ )
15+ else :
16+ SubparserActionType = (
17+ argparse ._SubParsersAction # pyright: ignore[reportPrivateUsage] #pylint: disable=protected-access
18+ )
619
720
821class Command (ABC ):
@@ -20,7 +33,7 @@ class Command(ABC):
2033
2134 @staticmethod
2235 @abstractmethod
23- def create_menu (subparsers : "argparse._SubParsersAction[Any]" ) -> None :
36+ def create_menu (subparsers : SubparserActionType ) -> None :
2437 """Add a sub-parser to the given parser.
2538
2639 Args:
@@ -42,7 +55,7 @@ def __call__(self, args: argparse.Namespace) -> None:
4255
4356 @staticmethod
4457 def parser (
45- subparsers : "argparse._SubParsersAction[Any]" ,
58+ subparsers : SubparserActionType ,
4659 command : Type ["Command.CHILD_TYPE" ],
4760 ) -> "argparse.ArgumentParser" :
4861 """Generate the parser.
@@ -72,4 +85,4 @@ def parser(
7285 )
7386
7487 parser .set_defaults (func = command ())
75- return cast ( argparse . ArgumentParser , parser )
88+ return parser
0 commit comments