def handle( self, error: Exception, request: BoltRequest, response: Optional[BoltResponse], ): all_available_args = { "logger": self.logger, "error": error, "client": request.context.client, "req": request, "request": request, "resp": response, "response": response, "context": request.context, "body": request.body, # payload "body": request.body, "options": to_options(request.body), "shortcut": to_shortcut(request.body), "action": to_action(request.body), "view": to_view(request.body), "command": to_command(request.body), "event": to_event(request.body), "message": to_message(request.body), "step": to_step(request.body), # utilities "say": request.context.say, "respond": request.context.respond, } all_available_args["payload"] = (all_available_args["options"] or all_available_args["shortcut"] or all_available_args["action"] or all_available_args["view"] or all_available_args["command"] or all_available_args["event"] or all_available_args["message"] or all_available_args["step"] or request.body) kwargs: Dict[str, Any] = { # type: ignore k: v for k, v in all_available_args.items() if k in self.arg_names # type: ignore } found_arg_names = kwargs.keys() for name in self.arg_names: if name not in found_arg_names: self.logger.warning(f"{name} is not a valid argument") kwargs[name] = None self.func(**kwargs)
def _block_action( constraints: Union[str, Pattern, Dict[str, Union[str, Pattern]]], body: Dict[str, Any], ) -> bool: if is_block_actions(body) is False: return False action = to_action(body) if isinstance(constraints, (str, Pattern)): action_id = constraints return _matches(action_id, action["action_id"]) elif isinstance(constraints, dict): # block_id matching is optional block_id: Optional[Union[str, Pattern]] = constraints.get("block_id") block_id_matched = block_id is None or _matches( block_id, action.get("block_id")) action_id_matched = _matches(constraints["action_id"], action["action_id"]) return block_id_matched and action_id_matched
def _build_all_available_args( logger: Logger, request: AsyncBoltRequest, response: Optional[BoltResponse], error: Optional[Exception] = None, ) -> Dict[str, Any]: all_available_args = { "logger": logger, "error": error, "client": request.context.client, "req": request, "request": request, "resp": response, "response": response, "context": request.context, # payload "body": request.body, "options": to_options(request.body), "shortcut": to_shortcut(request.body), "action": to_action(request.body), "view": to_view(request.body), "command": to_command(request.body), "event": to_event(request.body), "message": to_message(request.body), "step": to_step(request.body), # utilities "say": request.context.say, "respond": request.context.respond, } all_available_args["payload"] = ( all_available_args["options"] or all_available_args["shortcut"] or all_available_args["action"] or all_available_args["view"] or all_available_args["command"] or all_available_args["event"] or all_available_args["message"] or all_available_args["step"] or request.body ) return all_available_args
def build_async_required_kwargs( *, logger: logging.Logger, required_arg_names: Sequence[str], request: AsyncBoltRequest, response: Optional[BoltResponse], next_func: Callable[[], None] = None, ) -> Dict[str, Any]: all_available_args = { "logger": logger, "client": request.context.client, "req": request, "request": request, "resp": response, "response": response, "context": request.context, "body": request.body, # payload "options": to_options(request.body), "shortcut": to_shortcut(request.body), "action": to_action(request.body), "view": to_view(request.body), "command": to_command(request.body), "event": to_event(request.body), "message": to_message(request.body), "step": to_step(request.body), # utilities "ack": request.context.ack, "say": request.context.say, "respond": request.context.respond, # middleware "next": next_func, } all_available_args["payload"] = (all_available_args["options"] or all_available_args["shortcut"] or all_available_args["action"] or all_available_args["view"] or all_available_args["command"] or all_available_args["event"] or all_available_args["message"] or all_available_args["step"] or request.body) for k, v in request.context.items(): if k not in all_available_args: all_available_args[k] = v if len(required_arg_names) > 0: # To support instance/class methods in a class for listeners/middleware, # check if the first argument is either self or cls first_arg_name = required_arg_names[0] if first_arg_name in {"self", "cls"}: required_arg_names.pop(0) elif first_arg_name not in all_available_args.keys(): logger.warning(warning_skip_uncommon_arg_name(first_arg_name)) required_arg_names.pop(0) kwargs: Dict[str, Any] = { k: v for k, v in all_available_args.items() if k in required_arg_names } found_arg_names = kwargs.keys() for name in required_arg_names: if name == "args": if isinstance(request, AsyncBoltRequest): kwargs[name] = AsyncArgs(**all_available_args) else: logger.warning( f"Unknown Request object type detected ({type(request)})") if name not in found_arg_names: logger.warning(f"{name} is not a valid argument") kwargs[name] = None return kwargs
def build_required_kwargs( *, logger: logging.Logger, required_arg_names: Sequence[str], request: BoltRequest, response: Optional[BoltResponse], next_func: Callable[[], None] = None, ) -> Dict[str, Any]: all_available_args = { "logger": logger, "client": request.context.client, "req": request, "request": request, "resp": response, "response": response, "context": request.context, # payload "body": request.body, "options": to_options(request.body), "shortcut": to_shortcut(request.body), "action": to_action(request.body), "view": to_view(request.body), "command": to_command(request.body), "event": to_event(request.body), "message": to_message(request.body), "step": to_step(request.body), # utilities "ack": request.context.ack, "say": request.context.say, "respond": request.context.respond, # middleware "next": next_func, } all_available_args["payload"] = ( all_available_args["options"] or all_available_args["shortcut"] or all_available_args["action"] or all_available_args["view"] or all_available_args["command"] or all_available_args["event"] or all_available_args["message"] or all_available_args["step"] or request.body ) for k, v in request.context.items(): if k not in all_available_args: all_available_args[k] = v kwargs: Dict[str, Any] = { k: v for k, v in all_available_args.items() if k in required_arg_names } found_arg_names = kwargs.keys() for name in required_arg_names: if name == "args": if isinstance(request, BoltRequest): kwargs[name] = Args(**all_available_args) else: logger.warning( f"Unknown Request object type detected ({type(request)})" ) if name not in found_arg_names: logger.warning(f"{name} is not a valid argument") kwargs[name] = None return kwargs