Exemplo n.º 1
0
Arquivo: cli.py Projeto: mcbeet/beet
 def add_command(self,
                 cmd: click.Command,
                 name: Optional[str] = None) -> None:
     if cmd.callback:  # type: ignore
         cmd.callback = error_handler(should_exit=True)(
             cmd.callback)  # type: ignore
     return super().add_command(cmd, name=name)
Exemplo n.º 2
0
    def _wrapper(command: click.Command):
        original_command = command.callback

        def _callback(*args, **kwargs):
            context = click.get_current_context()
            config = context.obj.config

            value = kwargs.get(param)

            if value is None:
                if (not hasattr(config, param)
                        or getattr(config, param) is None):
                    raise click.BadParameter(
                        f"must provide {param}",
                        context,
                        get_param_obj(context, param),
                    )
                value = getattr(config, param)

            config.validate(param, value)

            return original_command(*args, **kwargs)

        command.callback = update_wrapper(_callback, original_command)

        return command
Exemplo n.º 3
0
    def decorator(command: click.Command) -> click.Command:
        assert command.callback
        callback = command.callback

        command.params += options

        def call_with_blockchain_info(**params: Any) -> Callable:
            address_overwrites = {
                contract: value
                for contract, value in (
                    (contract, params.pop(param))
                    for contract, param in param_for_contract.items())
                if value is not None
            }
            params["web3"], params["contracts"], params[
                "start_block"] = connect_to_blockchain(
                    eth_rpc=params.pop("eth_rpc"),
                    gas_price_strategy=params.pop("gas_price"),
                    used_contracts=contracts,
                    address_overwrites=address_overwrites,
                    development_environment=params.pop(
                        "development_environment"),
                )
            return callback(**params)

        command.callback = call_with_blockchain_info
        return command
Exemplo n.º 4
0
    def decorator(command: click.Command) -> click.Command:
        assert command.callback
        callback = command.callback

        command.params += options

        def call_with_blockchain_info(**params: Any) -> Callable:
            address_overwrites = {
                contract: value
                for contract, value in (
                    (contract, params.pop(param))
                    for contract, param in param_for_contract.items())
                if value is not None
            }
            params['web3'], params['contracts'], params[
                'start_block'] = connect_to_blockchain(
                    eth_rpc=params.pop('eth_rpc'),
                    used_contracts=contracts,
                    address_overwrites=address_overwrites,
                    contracts_version=contracts_version,
                )
            return callback(**params)

        command.callback = call_with_blockchain_info
        return command
Exemplo n.º 5
0
def multi_instance(command: click.Command):
    """
    decorator for a click command to allow multiple instances to be passed in
    """

    original_command = command.callback

    def multi_callback(instance_names: List[str], *args, **kwargs):
        from gs_manager.servers import (
            BaseServer,
            STATUS_SUCCESS,
            STATUS_FAILED,
            STATUS_PARTIAL_FAIL,
        )

        context = click.get_current_context()
        server: BaseServer = context.obj

        if context.params.get("foreground"):
            raise click.ClickException(
                "cannot use @ options with the --foreground option")

        if context.params.get("parallel"):
            results = _run_parallel(original_command, instance_names, *args,
                                    **kwargs)
        else:
            results = _run_sync(original_command, instance_names, *args,
                                **kwargs)

        server.logger.debug(f"results: {results}")
        partial_failed = results.count(STATUS_PARTIAL_FAIL)
        failed = results.count(STATUS_FAILED)
        return_code = STATUS_SUCCESS
        total = len(results)

        if failed > 0:
            server.logger.warning(f"{failed}/{total} return a failure code")
            return_code = STATUS_PARTIAL_FAIL
        if partial_failed > 0:
            server.logger.warning(
                f"{partial_failed}/{total} return a partial failure code")
            return_code = STATUS_PARTIAL_FAIL

        if failed == total:
            return_code = STATUS_FAILED
        return return_code

    wrapper_function = _instance_wrapper(original_command, multi_callback)
    command.callback = update_wrapper(wrapper_function, original_command)
    return command
Exemplo n.º 6
0
def single_instance(command: click.Command):
    """
    decorator for a click command to enforce a single instance or zero
    instances are passed in
    """

    original_command = command.callback

    def multi_callback(*args, **kwargs):
        raise click.ClickException("{} does not support @all".format(
            command.name))

    wrapper_function = _instance_wrapper(original_command, multi_callback)
    command.callback = update_wrapper(wrapper_function, original_command)
    return command