def dynamic_dispatcher()

in modular_cli/service/decorators.py [0:0]


def dynamic_dispatcher(func):
    @wraps(func)
    def wrapper(ctx, *args, **kwargs):
        try:
            if not ctx.args:
                params = {HELP_COMMAND: True}
                return func(**params)

            view_type = CLI_VIEW
            if ctx.params.get(TABLE_VIEW):
                view_type = TABLE_VIEW
            if ctx.params.get(JSON_VIEW):
                view_type = JSON_VIEW
            if ctx.args[0] in ['setup', 'login', 'cleanup', 'version',
                               'enable_autocomplete', 'disable_autocomplete']:
                response = configuration_executor(
                    config_command=ctx.args[0],
                    config_command_help=ctx.params['help'],
                    config_params=ctx.args,
                )
                return response

            params_indexes = [
                ctx.args.index(arg) for arg in ctx.args if arg.startswith('-')
            ]
            if params_indexes:
                command_end_index, *_ = params_indexes
                requested_command = ctx.args[:command_end_index]
                parameters = ctx.args[command_end_index:]
                response = func(help=kwargs.get('help'),
                                command=requested_command,
                                parameters=parameters,
                                view_type=view_type)

            else:
                requested_command = ctx.args
                parameters = {}
                response = func(help=kwargs.get('help'),
                                command=requested_command,
                                parameters=parameters,
                                view_type=view_type)
            return response

        except ModularCliBaseException as e:
            response = CommandResponse(message=str(e), code=e.code)
            return response

    return wrapper