Source code for pynenc.cli.runner_cli
import argparse
from pynenc.app import Pynenc
from pynenc.cli.config_cli import add_config_subparser
from pynenc.cli.namespace import PynencCLINamespace
from pynenc.runner import DummyRunner
[docs]
def add_runner_subparser(subparsers: argparse._SubParsersAction) -> None:
"""
Add subparsers for runner-related commands to the main argparse parser.
This function sets up the CLI structure for commands related to the runner,
including subcommands for starting a runner and showing its configuration.
It integrates runner-specific commands into the broader CLI tool.
:param argparse._SubParsersAction subparsers: The subparsers object from the main parser.
"""
runner_parser = subparsers.add_parser("runner", help="Commands related to runner")
runner_subparsers = runner_parser.add_subparsers(
dest="runner_command", required=True
)
# Runner start command
runner_start_parser = runner_subparsers.add_parser("start", help="Start a runner")
runner_start_parser.set_defaults(func=start_runner_command)
# Runner show_config command
add_config_subparser(runner_subparsers)
[docs]
def start_runner_command(args: PynencCLINamespace) -> None:
"""
Execute the 'start' command for a Pynenc runner.
This command initiates the runner associated with the Pynenc application instance.
It ensures that the provided application instance is valid and not a DummyRunner,
then starts the runner's execution. An error is raised if the runner is not suitable
for starting (e.g., a DummyRunner).
:param PynencCLINamespace args: The parsed CLI arguments, including the Pynenc application instance.
"""
print(f"Starting runner for app: {args.app}")
if not isinstance(args.app_instance, Pynenc):
raise TypeError("app_instance must be an instance of Pynenc")
app_instance = args.app_instance
if isinstance(app_instance.runner, DummyRunner):
raise ValueError("DummyRunner cannot be started, use another runner")
app_instance.runner.run()