1from abc import abstractmethod
2from distutils.dist import Distribution
3from typing import Any, Callable, Iterable, List, Optional, Tuple, Union
4
5class Command:
6    sub_commands: List[Tuple[str, Optional[Callable[[Command], bool]]]]
7    def __init__(self, dist: Distribution) -> None: ...
8    @abstractmethod
9    def initialize_options(self) -> None: ...
10    @abstractmethod
11    def finalize_options(self) -> None: ...
12    @abstractmethod
13    def run(self) -> None: ...
14    def announce(self, msg: str, level: int = ...) -> None: ...
15    def debug_print(self, msg: str) -> None: ...
16    def ensure_string(self, option: str, default: Optional[str] = ...) -> None: ...
17    def ensure_string_list(self, option: Union[str, List[str]]) -> None: ...
18    def ensure_filename(self, option: str) -> None: ...
19    def ensure_dirname(self, option: str) -> None: ...
20    def get_command_name(self) -> str: ...
21    def set_undefined_options(self, src_cmd: str, *option_pairs: Tuple[str, str]) -> None: ...
22    def get_finalized_command(self, command: str, create: int = ...) -> Command: ...
23    def reinitialize_command(self, command: Union[Command, str], reinit_subcommands: int = ...) -> Command: ...
24    def run_command(self, command: str) -> None: ...
25    def get_sub_commands(self) -> List[str]: ...
26    def warn(self, msg: str) -> None: ...
27    def execute(self, func: Callable[..., Any], args: Iterable[Any], msg: Optional[str] = ..., level: int = ...) -> None: ...
28    def mkpath(self, name: str, mode: int = ...) -> None: ...
29    def copy_file(
30        self,
31        infile: str,
32        outfile: str,
33        preserve_mode: int = ...,
34        preserve_times: int = ...,
35        link: Optional[str] = ...,
36        level: Any = ...,
37    ) -> Tuple[str, bool]: ...  # level is not used
38    def copy_tree(
39        self,
40        infile: str,
41        outfile: str,
42        preserve_mode: int = ...,
43        preserve_times: int = ...,
44        preserve_symlinks: int = ...,
45        level: Any = ...,
46    ) -> List[str]: ...  # level is not used
47    def move_file(self, src: str, dst: str, level: Any = ...) -> str: ...  # level is not used
48    def spawn(self, cmd: Iterable[str], search_path: int = ..., level: Any = ...) -> None: ...  # level is not used
49    def make_archive(
50        self,
51        base_name: str,
52        format: str,
53        root_dir: Optional[str] = ...,
54        base_dir: Optional[str] = ...,
55        owner: Optional[str] = ...,
56        group: Optional[str] = ...,
57    ) -> str: ...
58    def make_file(
59        self,
60        infiles: Union[str, List[str], Tuple[str]],
61        outfile: str,
62        func: Callable[..., Any],
63        args: List[Any],
64        exec_msg: Optional[str] = ...,
65        skip_msg: Optional[str] = ...,
66        level: Any = ...,
67    ) -> None: ...  # level is not used
68