gitscope
https://dev.kronoz.win/r/marzneshin.git
marzneshin-cli.py · v0.7.3
Source
1 a47eb4c Dawsh 2y ago #!/usr/bin/env python3
2 a47eb4c Dawsh 2y ago
3 eafb4a4 Mrdn 2y ago import os
4 a47eb4c Dawsh 2y ago
5 a47eb4c Dawsh 2y ago import typer
6 a47eb4c Dawsh 2y ago from typer._completion_shared import Shells
7 a47eb4c Dawsh 2y ago
8 a47eb4c Dawsh 2y ago import cli.admin
9 a47eb4c Dawsh 2y ago import cli.subscription
10 a47eb4c Dawsh 2y ago import cli.user
11 a47eb4c Dawsh 2y ago
12 a47eb4c Dawsh 2y ago app = typer.Typer(no_args_is_help=True, add_completion=False)
13 a47eb4c Dawsh 2y ago app.add_typer(cli.admin.app, name="admin")
14 a47eb4c Dawsh 2y ago app.add_typer(cli.subscription.app, name="subscription")
15 a47eb4c Dawsh 2y ago app.add_typer(cli.user.app, name="user")
16 a47eb4c Dawsh 2y ago
17 a47eb4c Dawsh 2y ago
18 a47eb4c Dawsh 2y ago # Hidden completion app
19 eafb4a4 Mrdn 2y ago app_completion = typer.Typer(
20 f4fecee Dawsh 2y ago no_args_is_help=True,
21 f4fecee Dawsh 2y ago help="Generate and install completion scripts.",
22 f4fecee Dawsh 2y ago hidden=True,
23 eafb4a4 Mrdn 2y ago )
24 a47eb4c Dawsh 2y ago app.add_typer(app_completion, name="completion")
25 a47eb4c Dawsh 2y ago
26 a47eb4c Dawsh 2y ago
27 a47eb4c Dawsh 2y ago def get_default_shell() -> Shells:
28 eafb4a4 Mrdn 2y ago """
29 eafb4a4 Mrdn 2y ago Find the default shell
30 eafb4a4 Mrdn 2y ago """
31 eafb4a4 Mrdn 2y ago shell = os.environ.get("SHELL")
32 a47eb4c Dawsh 2y ago if shell:
33 eafb4a4 Mrdn 2y ago shell = shell.split("/")[-1]
34 a47eb4c Dawsh 2y ago if shell in Shells.__members__:
35 a47eb4c Dawsh 2y ago return getattr(Shells, shell)
36 a47eb4c Dawsh 2y ago return Shells.bash
37 a47eb4c Dawsh 2y ago
38 a47eb4c Dawsh 2y ago
39 eafb4a4 Mrdn 2y ago @app_completion.command(
40 eafb4a4 Mrdn 2y ago help="Show completion for the specified shell, to copy or customize it."
41 eafb4a4 Mrdn 2y ago )
42 eafb4a4 Mrdn 2y ago def show(
43 eafb4a4 Mrdn 2y ago ctx: typer.Context,
44 eafb4a4 Mrdn 2y ago shell: Shells = typer.Option(
45 eafb4a4 Mrdn 2y ago None, help="The shell to install completion for.", case_sensitive=False
46 eafb4a4 Mrdn 2y ago ),
47 eafb4a4 Mrdn 2y ago ) -> None:
48 a47eb4c Dawsh 2y ago if shell is None:
49 a47eb4c Dawsh 2y ago shell = get_default_shell()
50 a47eb4c Dawsh 2y ago typer.completion.show_callback(ctx, None, shell)
51 a47eb4c Dawsh 2y ago
52 a47eb4c Dawsh 2y ago
53 a47eb4c Dawsh 2y ago @app_completion.command(help="Install completion for the specified shell.")
54 eafb4a4 Mrdn 2y ago def install(
55 eafb4a4 Mrdn 2y ago ctx: typer.Context,
56 eafb4a4 Mrdn 2y ago shell: Shells = typer.Option(
57 eafb4a4 Mrdn 2y ago None, help="The shell to install completion for.", case_sensitive=False
58 eafb4a4 Mrdn 2y ago ),
59 eafb4a4 Mrdn 2y ago ) -> None:
60 a47eb4c Dawsh 2y ago if shell is None:
61 a47eb4c Dawsh 2y ago shell = get_default_shell()
62 a47eb4c Dawsh 2y ago typer.completion.install_callback(ctx, None, shell)
63 a47eb4c Dawsh 2y ago
64 a47eb4c Dawsh 2y ago
65 a47eb4c Dawsh 2y ago if __name__ == "__main__":
66 a47eb4c Dawsh 2y ago typer.completion.completion_init()
67 eafb4a4 Mrdn 2y ago app(prog_name=os.environ.get("CLI_PROG_NAME"))