@@ -92,6 +92,7 @@ def __init__(
9292 enable_lazy_state : typing .Optional [bool ] = None ,
9393 ingress_private : typing .Optional [bool ] = None ,
9494 invocation_retry_policy : typing .Optional [InvocationRetryPolicy ] = None ,
95+ context_managers : typing .Optional [typing .List [typing .Callable [[], typing .AsyncContextManager [None ]]]] = None ,
9596 ):
9697 self .service_tag = ServiceTag ("workflow" , name , description , metadata )
9798 self .handlers = {}
@@ -102,6 +103,7 @@ def __init__(
102103 self .enable_lazy_state = enable_lazy_state
103104 self .ingress_private = ingress_private
104105 self .invocation_retry_policy = invocation_retry_policy
106+ self .context_managers = context_managers
105107
106108 @property
107109 def name (self ):
@@ -125,6 +127,7 @@ def main(
125127 enable_lazy_state : typing .Optional [bool ] = None ,
126128 ingress_private : typing .Optional [bool ] = None ,
127129 invocation_retry_policy : typing .Optional [InvocationRetryPolicy ] = None ,
130+ context_managers : typing .Optional [typing .List [typing .Callable [[], typing .AsyncContextManager [None ]]]] = None ,
128131 ) -> typing .Callable [[T ], T ]:
129132 """
130133 Mark this handler as a workflow entry point.
@@ -182,6 +185,7 @@ def main(
182185 enable_lazy_state = enable_lazy_state ,
183186 ingress_private = ingress_private ,
184187 invocation_retry_policy = invocation_retry_policy ,
188+ context_managers = context_managers ,
185189 )
186190
187191 def handler (
@@ -199,6 +203,7 @@ def handler(
199203 enable_lazy_state : typing .Optional [bool ] = None ,
200204 ingress_private : typing .Optional [bool ] = None ,
201205 invocation_retry_policy : typing .Optional [InvocationRetryPolicy ] = None ,
206+ context_managers : typing .Optional [typing .List [typing .Callable [[], typing .AsyncContextManager [None ]]]] = None ,
202207 ) -> typing .Callable [[T ], T ]:
203208 """
204209 Decorator for defining a handler function.
@@ -256,6 +261,7 @@ def handler(
256261 enable_lazy_state ,
257262 ingress_private ,
258263 invocation_retry_policy ,
264+ context_managers ,
259265 )
260266
261267 # pylint: disable=R0914
@@ -276,6 +282,7 @@ def _add_handler(
276282 enable_lazy_state : typing .Optional [bool ] = None ,
277283 ingress_private : typing .Optional [bool ] = None ,
278284 invocation_retry_policy : typing .Optional ["InvocationRetryPolicy" ] = None ,
285+ context_managers : typing .Optional [typing .List [typing .Callable [[], typing .AsyncContextManager [None ]]]] = None ,
279286 ) -> typing .Callable [[T ], T ]:
280287 """
281288 Decorator for defining a handler function.
@@ -342,6 +349,11 @@ def wrapped(*args, **kwargs):
342349
343350 signature = inspect .signature (fn , eval_str = True )
344351 description = inspect .getdoc (fn )
352+ combined_context_managers = (
353+ (self .context_managers or []) + (context_managers or [])
354+ if self .context_managers or context_managers
355+ else None
356+ )
345357 handler = make_handler (
346358 service_tag = self .service_tag ,
347359 handler_io = handler_io ,
@@ -359,6 +371,7 @@ def wrapped(*args, **kwargs):
359371 enable_lazy_state = enable_lazy_state ,
360372 ingress_private = ingress_private ,
361373 invocation_retry_policy = invocation_retry_policy ,
374+ context_managers = combined_context_managers ,
362375 )
363376 self .handlers [handler .name ] = handler
364377 return wrapped
0 commit comments