Coverage for src/su6_plugin_demo/cli.py: 91%
35 statements
« prev ^ index » next coverage.py v7.2.7, created at 2023-06-06 22:34 +0200
« prev ^ index » next coverage.py v7.2.7, created at 2023-06-06 22:34 +0200
1"""
2This module contains an example of both methods of adding commands to su6.
3"""
4import typing
6from su6.plugins import register, run_tool, PluginConfig, print
8# or: from su6 import register_plugin, run_tool
9from typer import Typer
12# method 1: adding top-level commands
15@register(with_state=True, config_key="demo.extra")
16class MoreDemoConfig(PluginConfig):
17 more: bool
20@register
21class DemoConfig(PluginConfig):
22 required_arg: str
23 boolean_arg: bool
24 optional_with_default: typing.Optional[str] = None
25 more: PluginConfig = MoreDemoConfig(more=False)
28config = DemoConfig()
31@register
32def first() -> int:
33 """
34 Register a top-level command.
36 @register works without ()
37 """
38 print("This is a demo command!")
39 return 0
42@register()
43def second() -> int:
44 """
45 Register a top-level command.
47 @register also works with ()
48 """
49 print("This is another demo command (with exit code)!")
50 run_tool("echo", "args", "go", "here")
51 return 1
54@register(name="third")
55def yet_another() -> bool:
56 """
57 Register a top-level command.
59 @register works with extra Typer arguments.
60 """
61 print("This is another demo command (with bool exit)!")
62 return True
65@register()
66def with_arguments(required_arg: str, boolean_arg: bool = False) -> None:
67 """
68 Register a top-level command.
70 @register works with extra Typer arguments.
71 """
72 config.update(required_arg=required_arg, boolean_arg=boolean_arg)
73 print(config)
74 assert config.more.state.config.pyproject == config.more.extras['state'].config.pyproject
77# method 2: adding a namespace (based on the plugin package name)
79app = Typer()
82@app.command()
83def subcommand() -> None:
84 """
85 Register a plugin-level command.
87 Can be used as `su6 demo subcommand` (in this case, the plugin name is demo)
88 """
89 print("this lives in a namespace")