def __call__()

in cli/srecli/group/__init__.py [0:0]


    def __call__(self, func: Callable) -> Callable:
        @wraps(func)
        def wrapper(*args, **kwargs):
            modular_mode = False
            if Path(__file__).parents[3].name == MODULAR_ADMIN:  # TODO check some other way
                modular_mode = True

            json_view = Env.RESPONSE_FORMAT.get() == 'json' or kwargs.get('json')
            verbose = Env.VERBOSE.get() or kwargs.get('verbose')  # todo verbose can be enabled earlier if from env
            kwargs.pop('json', None)
            kwargs.pop('verbose', None)
            if verbose:
                enable_verbose_logs()
            ctx = cast(click.Context, click.get_current_context())
            self.update_context(ctx)
            try:
                self._check_context(ctx)
                resp: CustodianResponse = click.pass_obj(func)(*args, **kwargs)
            except click.ClickException as e:
                _LOG.info('Click exception has occurred')
                resp = response(e.format_message(), code=HTTPStatus.BAD_REQUEST)
            except Exception as e:
                _LOG.error(f'Unexpected error has occurred: {e}')
                resp = response(str(e), code=HTTPStatus.INTERNAL_SERVER_ERROR)

            if modular_mode:
                _LOG.info('The cli is installed as a module. '
                          'Returning m3 modular cli response')
                formatted = ModularResponseProcessor().format(resp)
                return json.dumps(formatted, separators=(',', ':'))

            if not json_view:  # table view

                _LOG.info('Returning table view')
                prepared = TableResponseProcessor().format(resp)
                trace_id = resp.trace_id
                next_token = (resp.data or {}).get(NEXT_TOKEN_ATTR)

                try:
                    printer = TablePrinter(
                        items_per_column=ctx.obj['config'].items_per_column,
                        attributes_order=self._attributes_order
                    )
                    table = printer.print(
                        prepared,
                        raise_on_overflow=not Env.NO_PROMPT.get()
                    )
                except ColumnOverflow as ce:

                    _LOG.info(f'Awaiting user to respond to - {ce!r}.')
                    to_revert = click.prompt(
                        REVERT_TO_JSON_MESSAGE,
                        type=click.Choice(('y', 'n'))
                    )
                    if to_revert == 'n':
                        table = ce.table
                    else:
                        table, json_view = None, True

                if table:
                    if verbose:
                        click.echo(f'Trace id: \'{trace_id}\'')
                    if next_token:
                        click.echo(f'Next token: \'{next_token}\'')
                    click.echo(table)
                    _LOG.info(f'Finished request: \'{trace_id}\'')

            if json_view:
                _LOG.info('Returning json view')
                data = JsonResponseProcessor().format(resp)
                click.echo(json.dumps(data, indent=4))
            sys.exit(self.to_exit_code(resp.code))

        return wrapper