Source code for jobflow_remote.cli.jf

from typing import Annotated

import typer
from rich.text import Text

from jobflow_remote.cli.jfr_typer import JFRTyper
from jobflow_remote.cli.utils import (
    cleanup_job_controller,
    complete_profiling,
    get_config_manager,
    initialize_config_manager,
    out_console,
    start_profiling,
)
from jobflow_remote.config import ConfigError
from jobflow_remote.utils.log import initialize_cli_logger

app = JFRTyper(
    name="jf",
    add_completion=False,
    no_args_is_help=True,
    context_settings={"help_option_names": ["-h", "--help"]},
    epilog=None,  # to remove the default message in JFRTyper
)


[docs] def main_result_callback(*args, **kwargs) -> None: """ Callback executed after the main command is completed. Allowing to make cleanup and other final actions. """ cleanup_job_controller() profile = kwargs.get("profile", False) if profile: complete_profiling()
[docs] @app.callback(result_callback=main_result_callback) def main( project: Annotated[ str, typer.Option( "--project", "-p", help="Select a project for the current execution", is_eager=True, ), ] = None, full_exc: Annotated[ bool, typer.Option( "--full-exc", "-fe", help="Print the full stack trace of exception when enabled", is_eager=True, ), ] = False, profile: Annotated[ bool, typer.Option( "--profile", "-prof", help="Profile the command execution and provide a report at the end. For developers", is_eager=True, hidden=True, ), ] = False, ) -> None: """The controller CLI for jobflow-remote.""" from jobflow_remote import SETTINGS if full_exc: SETTINGS.cli_full_exc = True if profile: start_profiling() initialize_cli_logger( level=SETTINGS.cli_log_level.to_logging(), full_exc_info=SETTINGS.cli_full_exc ) # initialize the ConfigManager only once, to avoid parsing the configuration # files multiple times when the command is executed. initialize_config_manager() cm = get_config_manager() if project: SETTINGS.project = project try: project_data = cm.get_project_data() text = Text.from_markup( f"The selected project is [green]{project_data.project.name}[/green] " f"from config file [green]{project_data.filepath}[/green]" ) out_console.print(text) except ConfigError: # no warning printed if not needed as this seems to be confusing for the user pass