|
- from typing import List
- import click
- from click.core import _check_multicommand
-
-
- def print_bench_version(ctx, param, value):
- """Prints current bench version"""
- if not value or ctx.resilient_parsing:
- return
-
- import bench
-
- click.echo(bench.VERSION)
- ctx.exit()
-
-
- class MultiCommandGroup(click.Group):
- def add_command(self, cmd, name=None):
- """Registers another :class:`Command` with this group. If the name
- is not provided, the name of the command is used.
-
- Note: This is a custom Group that allows passing a list of names for
- the command name.
- """
- name = name or cmd.name
- if name is None:
- raise TypeError("Command has no name.")
- _check_multicommand(self, name, cmd, register=True)
-
- try:
- self.commands[name] = cmd
- except TypeError:
- if isinstance(name, list):
- for _name in name:
- self.commands[_name] = cmd
-
-
- class SugaredOption(click.Option):
- def __init__(self, *args, **kwargs):
- self.only_if_set: List = kwargs.pop("only_if_set")
- kwargs["help"] = (
- kwargs.get("help", "")
- + f". Option is acceptable only if {', '.join(self.only_if_set)} is used."
- )
- super().__init__(*args, **kwargs)
-
- def handle_parse_result(self, ctx, opts, args):
- current_opt = self.name in opts
- if current_opt and self.only_if_set:
- for opt in self.only_if_set:
- if opt not in opts:
- deafaults_set = [x.default for x in ctx.command.params if x.name == opt]
- if not deafaults_set:
- raise click.UsageError(f"Illegal Usage: Set '{opt}' before '{self.name}'.")
-
- return super().handle_parse_result(ctx, opts, args)
-
-
- def use_experimental_feature(ctx, param, value):
- if not value:
- return
-
- if value == "dynamic-feed":
- import bench.cli
-
- bench.cli.dynamic_feed = True
- bench.cli.verbose = True
- else:
- from bench.exceptions import FeatureDoesNotExistError
-
- raise FeatureDoesNotExistError(f"Feature {value} does not exist")
-
- from bench.cli import is_envvar_warn_set
-
- if is_envvar_warn_set:
- return
-
- click.secho(
- "WARNING: bench is using it's new CLI rendering engine. This behaviour has"
- f" been enabled by passing --{value} in the command. This feature is"
- " experimental and may not be implemented for all commands yet.",
- fg="yellow",
- )
-
-
- def setup_verbosity(ctx, param, value):
- if not value:
- return
-
- import bench.cli
-
- bench.cli.verbose = True
|