1- from typing import Callable , Union , Optional
1+ from typing import Callable , Union , Optional , List
22
33from slack_bolt .context import BoltContext
44from slack_bolt .listener import Listener , CustomListener
5+ from slack_bolt .listener_matcher import ListenerMatcher
56from slack_bolt .listener_matcher .builtins import (
67 workflow_step_edit ,
78 workflow_step_save ,
89 workflow_step_execute ,
910)
10- from slack_bolt .middleware import CustomMiddleware
11+ from slack_bolt .middleware import CustomMiddleware , Middleware
1112from slack_bolt .response import BoltResponse
1213from slack_bolt .workflows .step .utilities .complete import Complete
1314from slack_bolt .workflows .step .utilities .configure import Configure
@@ -26,9 +27,9 @@ def __init__(
2627 self ,
2728 * ,
2829 callback_id : str ,
29- edit : Union [Callable [..., Optional [BoltResponse ]], Listener ],
30- save : Union [Callable [..., Optional [BoltResponse ]], Listener ],
31- execute : Union [Callable [..., Optional [BoltResponse ]], Listener ],
30+ edit : Union [Callable [..., Optional [BoltResponse ]], Listener , List [ Callable ] ],
31+ save : Union [Callable [..., Optional [BoltResponse ]], Listener , List [ Callable ] ],
32+ execute : Union [Callable [..., Optional [BoltResponse ]], Listener , List [ Callable ] ],
3233 app_name : Optional [str ] = None ,
3334 ):
3435 self .callback_id = callback_id
@@ -38,7 +39,15 @@ def __init__(
3839 self .execute = self ._build_listener (callback_id , app_name , execute , "execute" )
3940
4041 @classmethod
41- def _build_listener (cls , callback_id , app_name , listener , name ):
42+ def _build_listener (
43+ cls ,
44+ callback_id : str ,
45+ app_name : str ,
46+ listener : Union [
47+ Callable [..., Optional [BoltResponse ]], Listener , List [Callable ]
48+ ],
49+ name : str ,
50+ ) -> Listener :
4251 if isinstance (listener , Listener ):
4352 return listener
4453 elif isinstance (listener , Callable ):
@@ -50,11 +59,22 @@ def _build_listener(cls, callback_id, app_name, listener, name):
5059 lazy_functions = [],
5160 auto_acknowledgement = name == "execute" ,
5261 )
62+ elif isinstance (listener , list ) and len (listener ) > 0 :
63+ ack = listener .pop (0 )
64+ lazy = listener
65+ return CustomListener (
66+ app_name = app_name ,
67+ matchers = cls ._build_matchers (name , callback_id ),
68+ middleware = cls ._build_middleware (name , callback_id ),
69+ ack_function = ack ,
70+ lazy_functions = lazy ,
71+ auto_acknowledgement = name == "execute" ,
72+ )
5373 else :
5474 raise ValueError (f"Invalid `{ name } ` listener" )
5575
5676 @classmethod
57- def _build_matchers (cls , name , callback_id ) :
77+ def _build_matchers (cls , name : str , callback_id : str ) -> List [ ListenerMatcher ] :
5878 if name == "edit" :
5979 return [workflow_step_edit (callback_id )]
6080 elif name == "save" :
@@ -65,7 +85,7 @@ def _build_matchers(cls, name, callback_id):
6585 raise ValueError (f"Invalid name { name } " )
6686
6787 @classmethod
68- def _build_middleware (cls , name , callback_id ) :
88+ def _build_middleware (cls , name : str , callback_id : str ) -> List [ Middleware ] :
6989 if name == "edit" :
7090 return [_build_edit_listener_middleware (callback_id )]
7191 elif name == "save" :
@@ -81,7 +101,7 @@ def _build_middleware(cls, name, callback_id):
81101#######################
82102
83103
84- def _build_edit_listener_middleware (callback_id ) :
104+ def _build_edit_listener_middleware (callback_id : str ) -> Middleware :
85105 def edit_listener_middleware (
86106 context : BoltContext ,
87107 client : WebClient ,
@@ -101,7 +121,7 @@ def edit_listener_middleware(
101121#######################
102122
103123
104- def _build_save_listener_middleware ():
124+ def _build_save_listener_middleware () -> Middleware :
105125 def save_listener_middleware (
106126 context : BoltContext ,
107127 client : WebClient ,
@@ -119,7 +139,7 @@ def save_listener_middleware(
119139#######################
120140
121141
122- def _build_execute_listener_middleware ():
142+ def _build_execute_listener_middleware () -> Middleware :
123143 def execute_listener_middleware (
124144 context : BoltContext ,
125145 client : WebClient ,
0 commit comments