Source code for simdb.cli.simdb

import copy
import sys
import click
from typing import IO

# from trogon import tui

from ..config import Config
from .. import __version__


g_debug = False


[docs] def recursive_help(cmd, parent=None): ctx = click.core.Context(cmd, info_name=cmd.name, parent=parent) click.echo(cmd.get_help(ctx)) click.echo() commands = getattr(cmd, "commands", {}) for sub in commands.values(): recursive_help(sub, ctx)
[docs] class AliasCommandGroup(click.Group): def __init__(self, name, **kwargs): super().__init__(name, **kwargs)
[docs] def add_command(self, cmd, name=None, aliases=None): super().add_command(cmd, name) aliases = aliases if aliases is not None else [] for alias in aliases: cmd = copy.copy(cmd) cmd.short_help = f"Alias for {name}." self.commands[alias] = cmd
[docs] def get_command(self, ctx, cmd_name): return self.commands.get(cmd_name)
[docs] def list_commands(self, ctx): return sorted(self.commands)
# @tui() @click.group("simdb", cls=AliasCommandGroup) @click.version_option(__version__) @click.option("-d", "--debug", is_flag=True, help="Run in debug mode.") @click.option("-v", "--verbose", is_flag=True, help="Run with verbose output.") @click.option("-c", "--config-file", type=click.File("r"), help="Config file to load.") @click.pass_context def cli(ctx, debug: bool, verbose: bool, config_file: IO): if not ctx.obj: ctx.obj = Config() ctx.obj.load(config_file) ctx.obj.debug = debug ctx.obj.verbose = verbose global g_debug g_debug = debug @cli.command(hidden=True) def dump_help(): recursive_help(cli)
[docs] def add_commands(): from .commands.manifest import manifest from .commands.alias import alias from .commands.simulation import simulation from .commands.config import config from .commands.database import database from .commands.remote import remote from .commands.provenance import provenance cli.add_command(manifest) cli.add_command(alias) cli.add_command(simulation, aliases=["sim"], name="simulation") cli.add_command(config) cli.add_command(database) cli.add_command(remote) cli.add_command(provenance)
add_commands()
[docs] def main() -> None: """ Main CLI entry function :return: None """ try: cli() except Exception as ex: click.echo(f"Error: {ex}", err=True) if g_debug: raise ex sys.exit(1)