forked from slackapi/bolt-python
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstep_middleware.py
More file actions
55 lines (47 loc) · 1.77 KB
/
step_middleware.py
File metadata and controls
55 lines (47 loc) · 1.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
from typing import Callable, Optional
from slack_bolt.listener import Listener
from slack_bolt.listener.thread_runner import ThreadListenerRunner
from slack_bolt.middleware import Middleware
from slack_bolt.request import BoltRequest
from slack_bolt.response import BoltResponse
from slack_bolt.util.utils import get_name_for_callable
from slack_bolt.workflows.step.step import WorkflowStep
class WorkflowStepMiddleware(Middleware): # type:ignore
def __init__(self, step: WorkflowStep, listener_runner: ThreadListenerRunner):
self.step = step
self.listener_runner = listener_runner
def process(
self,
*,
req: BoltRequest,
resp: BoltResponse,
next: Callable[[], BoltResponse],
) -> Optional[BoltResponse]:
if self.step.edit.matches(req=req, resp=resp):
resp = self._run(self.step.edit, req, resp)
if resp is not None:
return resp
elif self.step.save.matches(req=req, resp=resp):
resp = self._run(self.step.save, req, resp)
if resp is not None:
return resp
elif self.step.execute.matches(req=req, resp=resp):
resp = self._run(self.step.execute, req, resp)
if resp is not None:
return resp
return next()
def _run(
self,
listener: Listener,
req: BoltRequest,
resp: BoltResponse,
) -> Optional[BoltResponse]:
resp, next_was_not_called = listener.run_middleware(req=req, resp=resp)
if next_was_not_called:
return None
return self.listener_runner.run(
request=req,
response=resp,
listener_name=get_name_for_callable(listener.ack_function),
listener=listener,
)