|
19 | 19 | CallableAuthorize, |
20 | 20 | ) |
21 | 21 | from slack_bolt.error import BoltError, BoltUnhandledRequestError |
| 22 | +from slack_bolt.function import Function |
22 | 23 | from slack_bolt.lazy_listener.thread_runner import ThreadLazyListenerRunner |
23 | 24 | from slack_bolt.listener.builtins import TokenRevocationListeners |
24 | 25 | from slack_bolt.listener.custom_listener import CustomListener |
|
63 | 64 | IgnoringSelfEvents, |
64 | 65 | CustomMiddleware, |
65 | 66 | ) |
| 67 | +from slack_bolt.middleware.function_listener_matches import FunctionListenerToken |
66 | 68 | from slack_bolt.middleware.message_listener_matches import MessageListenerMatches |
67 | 69 | from slack_bolt.middleware.middleware_error_handler import ( |
68 | 70 | DefaultMiddlewareErrorHandler, |
|
78 | 80 | create_web_client, |
79 | 81 | get_boot_message, |
80 | 82 | get_name_for_callable, |
| 83 | + create_copy |
81 | 84 | ) |
82 | 85 | from slack_bolt.workflows.step import WorkflowStep, WorkflowStepMiddleware |
83 | 86 | from slack_bolt.workflows.step.step import WorkflowStepBuilder |
@@ -794,7 +797,7 @@ def __call__(*args, **kwargs): |
794 | 797 |
|
795 | 798 | def function( |
796 | 799 | self, |
797 | | - callback_id: Union[str, Pattern], |
| 800 | + callback_id: Union[str, Function], |
798 | 801 | matchers: Optional[Sequence[Callable[..., bool]]] = None, |
799 | 802 | middleware: Optional[Sequence[Union[Callable, Middleware]]] = None, |
800 | 803 | ) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]: |
@@ -825,11 +828,11 @@ def reverse_string(event, complete_success: CompleteSuccess, complete_error: Com |
825 | 828 | middleware: A list of lister middleware functions. |
826 | 829 | Only when all the middleware call `next()` method, the listener function can be invoked. |
827 | 830 | """ |
828 | | - |
| 831 | + middleware = list(middleware) if middleware else [] |
| 832 | + middleware.insert(0, FunctionListenerToken()) |
829 | 833 | def __call__(*args, **kwargs): |
830 | 834 | functions = self._to_listener_functions(kwargs) if kwargs else list(args) |
831 | | - primary_matcher = builtin_matchers.function_event(callback_id=callback_id, base_logger=self._base_logger) |
832 | | - return self._register_listener(list(functions), primary_matcher, matchers, middleware, True) |
| 835 | + return Function(self._register_listener, self._base_logger, list(functions), callback_id, matchers, middleware) |
833 | 836 |
|
834 | 837 | return __call__ |
835 | 838 |
|
@@ -1249,7 +1252,7 @@ def _init_context(self, req: BoltRequest): |
1249 | 1252 | req.context["token"] = self._token |
1250 | 1253 | if self._token is not None: |
1251 | 1254 | # This WebClient instance can be safely singleton |
1252 | | - req.context["client"] = self._client |
| 1255 | + req.context["client"] = create_copy(self._client) |
1253 | 1256 | else: |
1254 | 1257 | # Set a new dedicated instance for this request |
1255 | 1258 | client_per_request: WebClient = WebClient( |
|
0 commit comments