1from typing import Any, Callable, ContextManager, Iterable, Mapping, NoReturn, Optional, Sequence, Tuple, TypeVar, Union
2
3from click.formatting import HelpFormatter
4from click.parser import OptionParser
5
6_CC = TypeVar("_CC", bound=Callable[[], Any])
7
8def invoke_param_callback(
9    callback: Callable[[Context, Parameter, str | None], Any], ctx: Context, param: Parameter, value: str | None
10) -> Any: ...
11def augment_usage_errors(ctx: Context, param: Parameter | None = ...) -> ContextManager[None]: ...
12def iter_params_for_processing(
13    invocation_order: Sequence[Parameter], declaration_order: Iterable[Parameter]
14) -> Iterable[Parameter]: ...
15
16class Context:
17    parent: Context | None
18    command: Command
19    info_name: str | None
20    params: dict[Any, Any]
21    args: list[str]
22    protected_args: list[str]
23    obj: Any
24    default_map: Mapping[str, Any] | None
25    invoked_subcommand: str | None
26    terminal_width: int | None
27    max_content_width: int | None
28    allow_extra_args: bool
29    allow_interspersed_args: bool
30    ignore_unknown_options: bool
31    help_option_names: list[str]
32    token_normalize_func: Callable[[str], str] | None
33    resilient_parsing: bool
34    auto_envvar_prefix: str | None
35    color: bool | None
36    _meta: dict[str, Any]
37    _close_callbacks: list[Any]
38    _depth: int
39    def __init__(
40        self,
41        command: Command,
42        parent: Context | None = ...,
43        info_name: str | None = ...,
44        obj: Any | None = ...,
45        auto_envvar_prefix: str | None = ...,
46        default_map: Mapping[str, Any] | None = ...,
47        terminal_width: int | None = ...,
48        max_content_width: int | None = ...,
49        resilient_parsing: bool = ...,
50        allow_extra_args: bool | None = ...,
51        allow_interspersed_args: bool | None = ...,
52        ignore_unknown_options: bool | None = ...,
53        help_option_names: list[str] | None = ...,
54        token_normalize_func: Callable[[str], str] | None = ...,
55        color: bool | None = ...,
56    ) -> None: ...
57    @property
58    def meta(self) -> dict[str, Any]: ...
59    @property
60    def command_path(self) -> str: ...
61    def scope(self, cleanup: bool = ...) -> ContextManager[Context]: ...
62    def make_formatter(self) -> HelpFormatter: ...
63    def call_on_close(self, f: _CC) -> _CC: ...
64    def close(self) -> None: ...
65    def find_root(self) -> Context: ...
66    def find_object(self, object_type: type) -> Any: ...
67    def ensure_object(self, object_type: type) -> Any: ...
68    def lookup_default(self, name: str) -> Any: ...
69    def fail(self, message: str) -> NoReturn: ...
70    def abort(self) -> NoReturn: ...
71    def exit(self, code: int | str = ...) -> NoReturn: ...
72    def get_usage(self) -> str: ...
73    def get_help(self) -> str: ...
74    def invoke(self, callback: Command | Callable[..., Any], *args: Any, **kwargs: Any) -> Any: ...
75    def forward(self, callback: Command | Callable[..., Any], *args: Any, **kwargs: Any) -> Any: ...
76
77class BaseCommand:
78    allow_extra_args: bool
79    allow_interspersed_args: bool
80    ignore_unknown_options: bool
81    name: str
82    context_settings: dict[Any, Any]
83    def __init__(self, name: str, context_settings: dict[Any, Any] | None = ...) -> None: ...
84    def get_usage(self, ctx: Context) -> str: ...
85    def get_help(self, ctx: Context) -> str: ...
86    def make_context(self, info_name: str, args: list[str], parent: Context | None = ..., **extra: Any) -> Context: ...
87    def parse_args(self, ctx: Context, args: list[str]) -> list[str]: ...
88    def invoke(self, ctx: Context) -> Any: ...
89    def main(
90        self,
91        args: list[str] | None = ...,
92        prog_name: str | None = ...,
93        complete_var: str | None = ...,
94        standalone_mode: bool = ...,
95        **extra: Any,
96    ) -> Any: ...
97    def __call__(self, *args: Any, **kwargs: Any) -> Any: ...
98
99class Command(BaseCommand):
100    callback: Callable[..., Any] | None
101    params: list[Parameter]
102    help: str | None
103    epilog: str | None
104    short_help: str | None
105    options_metavar: str
106    add_help_option: bool
107    no_args_is_help: bool
108    hidden: bool
109    deprecated: bool
110    def __init__(
111        self,
112        name: str,
113        context_settings: dict[Any, Any] | None = ...,
114        callback: Callable[..., Any] | None = ...,
115        params: list[Parameter] | None = ...,
116        help: str | None = ...,
117        epilog: str | None = ...,
118        short_help: str | None = ...,
119        options_metavar: str = ...,
120        add_help_option: bool = ...,
121        no_args_is_help: bool = ...,
122        hidden: bool = ...,
123        deprecated: bool = ...,
124    ) -> None: ...
125    def get_params(self, ctx: Context) -> list[Parameter]: ...
126    def format_usage(self, ctx: Context, formatter: HelpFormatter) -> None: ...
127    def collect_usage_pieces(self, ctx: Context) -> list[str]: ...
128    def get_help_option_names(self, ctx: Context) -> set[str]: ...
129    def get_help_option(self, ctx: Context) -> Option | None: ...
130    def make_parser(self, ctx: Context) -> OptionParser: ...
131    def get_short_help_str(self, limit: int = ...) -> str: ...
132    def format_help(self, ctx: Context, formatter: HelpFormatter) -> None: ...
133    def format_help_text(self, ctx: Context, formatter: HelpFormatter) -> None: ...
134    def format_options(self, ctx: Context, formatter: HelpFormatter) -> None: ...
135    def format_epilog(self, ctx: Context, formatter: HelpFormatter) -> None: ...
136
137_T = TypeVar("_T")
138_F = TypeVar("_F", bound=Callable[..., Any])
139
140class MultiCommand(Command):
141    no_args_is_help: bool
142    invoke_without_command: bool
143    subcommand_metavar: str
144    chain: bool
145    result_callback: Callable[..., Any]
146    def __init__(
147        self,
148        name: str | None = ...,
149        invoke_without_command: bool = ...,
150        no_args_is_help: bool | None = ...,
151        subcommand_metavar: str | None = ...,
152        chain: bool = ...,
153        result_callback: Callable[..., Any] | None = ...,
154        **attrs: Any,
155    ) -> None: ...
156    def resultcallback(self, replace: bool = ...) -> Callable[[_F], _F]: ...
157    def format_commands(self, ctx: Context, formatter: HelpFormatter) -> None: ...
158    def resolve_command(self, ctx: Context, args: list[str]) -> tuple[str, Command, list[str]]: ...
159    def get_command(self, ctx: Context, cmd_name: str) -> Command | None: ...
160    def list_commands(self, ctx: Context) -> Iterable[str]: ...
161
162class Group(MultiCommand):
163    commands: dict[str, Command]
164    def __init__(self, name: str | None = ..., commands: dict[str, Command] | None = ..., **attrs: Any) -> None: ...
165    def add_command(self, cmd: Command, name: str | None = ...) -> None: ...
166    def command(self, *args: Any, **kwargs: Any) -> Callable[[Callable[..., Any]], Command]: ...
167    def group(self, *args: Any, **kwargs: Any) -> Callable[[Callable[..., Any]], Group]: ...
168
169class CommandCollection(MultiCommand):
170    sources: list[MultiCommand]
171    def __init__(self, name: str | None = ..., sources: list[MultiCommand] | None = ..., **attrs: Any) -> None: ...
172    def add_source(self, multi_cmd: MultiCommand) -> None: ...
173
174class _ParamType:
175    name: str
176    is_composite: bool
177    envvar_list_splitter: str | None
178    def __call__(self, value: str | None, param: Parameter | None = ..., ctx: Context | None = ...) -> Any: ...
179    def get_metavar(self, param: Parameter) -> str: ...
180    def get_missing_message(self, param: Parameter) -> str: ...
181    def convert(self, value: str, param: Parameter | None, ctx: Context | None) -> Any: ...
182    def split_envvar_value(self, rv: str) -> list[str]: ...
183    def fail(self, message: str, param: Parameter | None = ..., ctx: Context | None = ...) -> NoReturn: ...
184
185# This type is here to resolve https://github.com/python/mypy/issues/5275
186_ConvertibleType = Union[
187    type, _ParamType, Tuple[Union[type, _ParamType], ...], Callable[[str], Any], Callable[[Optional[str]], Any]
188]
189
190class Parameter:
191    param_type_name: str
192    name: str
193    opts: list[str]
194    secondary_opts: list[str]
195    type: _ParamType
196    required: bool
197    callback: Callable[[Context, Parameter, str], Any] | None
198    nargs: int
199    multiple: bool
200    expose_value: bool
201    default: Any
202    is_eager: bool
203    metavar: str | None
204    envvar: str | list[str] | None
205    def __init__(
206        self,
207        param_decls: Iterable[str] | None = ...,
208        type: _ConvertibleType | None = ...,
209        required: bool = ...,
210        default: Any | None = ...,
211        callback: Callable[[Context, Parameter, str], Any] | None = ...,
212        nargs: int | None = ...,
213        metavar: str | None = ...,
214        expose_value: bool = ...,
215        is_eager: bool = ...,
216        envvar: str | list[str] | None = ...,
217    ) -> None: ...
218    @property
219    def human_readable_name(self) -> str: ...
220    def make_metavar(self) -> str: ...
221    def get_default(self, ctx: Context) -> Any: ...
222    def add_to_parser(self, parser: OptionParser, ctx: Context) -> None: ...
223    def consume_value(self, ctx: Context, opts: dict[str, Any]) -> Any: ...
224    def type_cast_value(self, ctx: Context, value: Any) -> Any: ...
225    def process_value(self, ctx: Context, value: Any) -> Any: ...
226    def value_is_missing(self, value: Any) -> bool: ...
227    def full_process_value(self, ctx: Context, value: Any) -> Any: ...
228    def resolve_envvar_value(self, ctx: Context) -> str: ...
229    def value_from_envvar(self, ctx: Context) -> str | list[str]: ...
230    def handle_parse_result(self, ctx: Context, opts: dict[str, Any], args: list[str]) -> tuple[Any, list[str]]: ...
231    def get_help_record(self, ctx: Context) -> tuple[str, str]: ...
232    def get_usage_pieces(self, ctx: Context) -> list[str]: ...
233    def get_error_hint(self, ctx: Context) -> str: ...
234
235class Option(Parameter):
236    prompt: str  # sic
237    confirmation_prompt: bool
238    hide_input: bool
239    is_flag: bool
240    flag_value: Any
241    is_bool_flag: bool
242    count: bool
243    multiple: bool
244    allow_from_autoenv: bool
245    help: str | None
246    hidden: bool
247    show_default: bool
248    show_choices: bool
249    show_envvar: bool
250    def __init__(
251        self,
252        param_decls: Iterable[str] | None = ...,
253        show_default: bool = ...,
254        prompt: bool | str = ...,
255        confirmation_prompt: bool = ...,
256        hide_input: bool = ...,
257        is_flag: bool | None = ...,
258        flag_value: Any | None = ...,
259        multiple: bool = ...,
260        count: bool = ...,
261        allow_from_autoenv: bool = ...,
262        type: _ConvertibleType | None = ...,
263        help: str | None = ...,
264        hidden: bool = ...,
265        show_choices: bool = ...,
266        show_envvar: bool = ...,
267        **attrs: Any,
268    ) -> None: ...
269    def prompt_for_value(self, ctx: Context) -> Any: ...
270
271class Argument(Parameter):
272    def __init__(self, param_decls: Iterable[str] | None = ..., required: bool | None = ..., **attrs: Any) -> None: ...
273