From c4e38a5eaa3e595064b5729960f5b0271a825dfb Mon Sep 17 00:00:00 2001 From: dtomlinson Date: Thu, 12 Mar 2020 21:24:32 +0000 Subject: [PATCH] updating complexcli for click --- python/cli-click/.vscode/settings.json | 1 + python/cli-click/complexcli.py | 69 +++++++++++++++++++++++++ python/documentation/_static/custom.css | 19 +++++-- 3 files changed, 86 insertions(+), 3 deletions(-) create mode 100644 python/cli-click/.vscode/settings.json create mode 100644 python/cli-click/complexcli.py diff --git a/python/cli-click/.vscode/settings.json b/python/cli-click/.vscode/settings.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/python/cli-click/.vscode/settings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/python/cli-click/complexcli.py b/python/cli-click/complexcli.py new file mode 100644 index 0000000..8d76e2b --- /dev/null +++ b/python/cli-click/complexcli.py @@ -0,0 +1,69 @@ +import os +from importlib import import_module + +import click + +from musicbrainzapi.__version__ import __version__ +from musicbrainzapi.__header__ import __header__ + +# pylint:disable=invalid-name + +CONTEXT_SETTINGS = dict(auto_envvar_prefix="COMPLEX") + + +class Environment: + """Environment class to house shared parameters between all subcommands.""" + + def __init__(self): + self.verbose = False + self.home = os.getcwd() + + +pass_environment = click.make_pass_decorator( + Environment, ensure=True +) +cmd_folder = os.path.abspath( + os.path.join(os.path.dirname(__file__), "commands") +) + + +class ComplexCLI(click.MultiCommand): + """Access and run subcommands.""" + + def list_commands(self, ctx): + """List all subcommands.""" + rv = [ + filename[4:-3] + for filename in os.listdir(cmd_folder) + if filename.endswith(".py") and filename.startswith("cmd_") + ] + rv.sort() + return rv + + def get_command(self, ctx, cmd_name): + """Get chosen subcummands.""" + mod = import_module(f"musicbrainzapi.cli.commands.cmd_{cmd_name}") + return getattr(mod, cmd_name) + + +@click.command(cls=ComplexCLI, context_settings=CONTEXT_SETTINGS) +@click.option( + "-p", + "--path", + type=click.Path(exists=True, file_okay=False, resolve_path=True, writable=True), + help="Local path to save any output files.", + default=os.getcwd(), +) +@click.option("-v", "--verbose", is_flag=True, help="Enables verbose mode.") +@click.version_option( + version=__version__, + prog_name=__header__, + message=f"{__header__} version {__version__} 🎤", +) +@pass_environment +def cli(ctx, verbose, path): + """Display base command for the musicbrainzapi program.""" + ctx.verbose = verbose + if path is not None: + click.echo(f"Path set to {os.path.expanduser(path)}") + ctx.path = os.path.expanduser(path) diff --git a/python/documentation/_static/custom.css b/python/documentation/_static/custom.css index d4be59d..d2741c1 100644 --- a/python/documentation/_static/custom.css +++ b/python/documentation/_static/custom.css @@ -58,9 +58,22 @@ /*code example blocks*/ .rst-content pre.literal-block, .rst-content div[class^="highlight"] pre, .rst-content .linenodiv pre{ background: #b4bec8; - color: black; - /*border-style: solid;*/ - /*border-width: thin;*/ + color: #393C40; + border-style: groove; + border-width: thick; + border-color: #9098a0; + width: fit-content; +} + +/*code block highlight color + border*/ + +.highlight { + border: none; + background: none; +} + +.rst-content pre.literal-block, .rst-content div[class^="highlight"]{ + border: none; } /*colour of inline code blocks using ``*/