Source code for scadparser.cli

import os
import click
from scadparser import __version__


[docs]class Environment: """Context class holding state for cli commands""" def __init__(self): self.cwd = os.getcwd() self.debug = False
pass_environment = click.make_pass_decorator( Environment, ensure=True ) cmd_folder = os.path.abspath(os.path.join( os.path.dirname(__file__), "commands") )
[docs]class CLI(click.MultiCommand): """Modular CLI class""" def list_commands(self, ctx): """scan command directory and list all cli commands""" rv = [] for filename in os.listdir(cmd_folder): if filename.endswith(".py") and \ filename.startswith("cmd_"): rv.append(filename[4:-3]) rv.sort() return rv def get_command(self, ctx, name): """import cli command file on demand""" try: mod = __import__( f"scadparser.commands.cmd_{name}", None, None, ["cli"] ) except ImportError: # pragma: no cover return return mod.cli
@click.version_option(__version__, "-v", "--version") @click.command(cls=CLI) @click.option("--debug", is_flag=True, help="Enable debug output") @click.option("--scad_path", help="Path to scad code directory") @click.option("--scad_lib", help="Path to scad library directory") @pass_environment def cli(ctx, debug, scad_path, scad_lib): """primary CLI interface""" ctx.debug = debug ctx.scad_path = scad_path ctx.scad_lib = scad_lib