1
1
#!/usr/bin/env python
2
- from typing import Annotated , Optional
2
+ from typing import Annotated
3
3
4
- import typer
4
+ from cyclopts import App , Group
5
+ from cyclopts import Parameter
5
6
6
7
from sshgen import __app_name__ , __version__
7
8
from sshgen .logger import init_logger
8
9
from sshgen .models .loglevel import LogLevel
9
10
from sshgen .utils .app import AppUtils
10
11
from sshgen .utils .file import FileUtils
11
12
12
- app = typer .Typer (no_args_is_help = True )
13
+ app = App (version = f"{ __app_name__ } v{ __version__ } " , version_flags = ["--version" ], help_flags = ["--help" ])
14
+ app .meta .group_parameters = Group ("Debug Output" )
13
15
14
16
15
- @app .command ("generate" )
17
+ @app .command (name = "generate" )
16
18
def generate_hosts_file (
17
- hosts_file : Annotated [str , typer . Option ( "--hosts-file" , "-h" )] = "./hosts.yml" ,
18
- output : Annotated [str , typer . Option ( "--output" , "-o" )] = "./config" ,
19
+ hosts_file : Annotated [str , Parameter ( name = [ "--hosts-file" , "-h" ], allow_leading_hyphen = True )] = "./hosts.yml" ,
20
+ output : Annotated [str , Parameter ([ "--output" , "-o" ] )] = "./config" ,
19
21
) -> None :
20
22
"""
21
23
Command to generate SSH configuration file.
24
+
22
25
By default, it uses file hosts.yml placed in your working directory and outputs to the file named "config".
26
+
23
27
Example usage: sshgen generate -o my_ssh_config
24
28
"""
25
29
@@ -30,37 +34,24 @@ def generate_hosts_file(
30
34
sshgen .generate_ssh_config ()
31
35
32
36
33
- def _version_callback (value : bool ) -> None :
34
- if value :
35
- typer .echo (f"{ __app_name__ } v{ __version__ } " )
36
- raise typer .Exit ()
37
-
38
-
39
- # noinspection PyUnusedLocal
40
- @app .callback ()
37
+ @app .meta .default ()
41
38
def main (
39
+ * tokens : Annotated [str , Parameter (show = False , allow_leading_hyphen = True )],
42
40
verbose : Annotated [
43
- Optional [bool ],
44
- typer .Option (
45
- "--verbose" ,
46
- is_eager = True ,
47
- envvar = ["SSHGEN_VERBOSE" , "SSHGEN_DEBUG" ],
48
- help = "Switch log level to DEBUG, default is INFO." ,
49
- ),
41
+ bool , Parameter (name = "--verbose" , show_default = False , negative = "" , env_var = ["SSHGEN_VERBOSE" , "SSHGEN_DEBUG" ])
50
42
] = False ,
51
- version : Annotated [
52
- Optional [bool ],
53
- typer .Option ("-v" , "--version" , is_eager = True , callback = _version_callback ),
54
- ] = None ,
55
43
) -> None :
56
44
"""
57
45
sshgen generates SSH configuration file based on an Ansible hosts file.
58
46
"""
47
+
59
48
if verbose :
60
49
init_logger (level = LogLevel .DEBUG )
61
50
else :
62
51
init_logger (level = LogLevel .INFO )
63
52
53
+ app (tokens )
54
+
64
55
65
56
if __name__ == "__main__" :
66
- app ()
57
+ app . meta ()
0 commit comments