Coverage for src/somesy/main.py: 91%
23 statements
« prev ^ index » next coverage.py v7.2.7, created at 2023-08-10 14:33 +0000
« prev ^ index » next coverage.py v7.2.7, created at 2023-08-10 14:33 +0000
1"""Main entry point for the somesy CLI."""
2import logging
3import sys
5import typer
7from somesy import __version__
8from somesy.cli import init, sync
9from somesy.core.log import SomesyLogLevel, init_log, set_log_level
11app = typer.Typer()
13logger = logging.getLogger("somesy")
16@app.callback()
17def version(value: bool):
18 """Show somesy version and exit."""
19 if value:
20 typer.echo(f"somesy version: {__version__}")
21 raise typer.Exit()
24@app.callback()
25def common(
26 ctx: typer.Context,
27 version: bool = typer.Option(
28 None, "--version", help=version.__doc__, callback=version
29 ),
30 show_info: bool = typer.Option(
31 None,
32 "--info",
33 "-v",
34 help="Enable basic logging.",
35 ),
36 verbose: bool = typer.Option(
37 None,
38 "--verbose",
39 "-vv",
40 help="Enable verbose logging.",
41 ),
42 debug: bool = typer.Option(
43 None,
44 "--debug",
45 "-vvv",
46 help="Enable debug logging.",
47 ),
48):
49 """General flags and arguments for somesy."""
50 init_log()
52 if sum(map(int, map(bool, [show_info, verbose, debug]))) > 1:
53 typer.echo(
54 "Only one of --info, --verbose or --debug may be set!", file=sys.stderr
55 )
56 raise typer.Exit(1)
58 if show_info or verbose or debug:
59 # NOTE: only explicitly setting log level if a flag is passed,
60 # in order to distinguish from using the "default log level"
61 # (needed to check if the user did override the log level as a CLI flag)
62 set_log_level(
63 SomesyLogLevel.from_flags(info=show_info, verbose=verbose, debug=debug)
64 )
67# add subcommands
68app.add_typer(sync.app, name="sync")
69app.add_typer(init.app, name="init")