2626)
2727
2828import attrs
29- import chalice
3029from chalice import (
3130 Chalice ,
3231 ChaliceViewError ,
3332)
3433from chalice .app import (
3534 BadRequestError ,
3635 CaseInsensitiveMapping ,
36+ EventSourceHandler ,
3737 HeadersType ,
3838 MultiDict ,
3939 NotFoundError ,
@@ -598,7 +598,7 @@ class metric_alarm(HandlerDecorator):
598598 period : int
599599
600600 def __call__ (self , f ):
601- assert isinstance (f , chalice . app . EventSourceHandler ), f
601+ assert isinstance (f , EventSourceHandler ), f
602602 try :
603603 metric_alarms = getattr (f , 'metric_alarms' )
604604 except AttributeError :
@@ -611,6 +611,14 @@ def __call__(self, f):
611611 def tf_resource_name (self ) -> str :
612612 return f'{ self .tf_function_resource_name } _{ self .metric .name } '
613613
614+ @property
615+ def event_source_handlers (self ) -> dict [str , EventSourceHandler ]:
616+ return {
617+ handler_name : handler
618+ for handler_name , handler in self .handler_map .items ()
619+ if isinstance (handler , EventSourceHandler )
620+ }
621+
614622 @property
615623 def metric_alarms (self ) -> Iterator [metric_alarm ]:
616624 for metric in LambdaMetric :
@@ -622,19 +630,16 @@ def metric_alarms(self) -> Iterator[metric_alarm]:
622630 threshold = 0 ,
623631 period = 60 * 60 if for_errors else 5 * 60 )
624632 yield alarm .bind (self )
625- for handler_name , handler in self .handler_map .items ():
626- if isinstance (handler , chalice .app .EventSourceHandler ):
627- try :
628- metric_alarms = getattr (handler , 'metric_alarms' )
629- except AttributeError :
630- metric_alarms = (
631- self .metric_alarm (metric = metric ,
632- threshold = 0 ,
633- period = 5 * 60 )
634- for metric in LambdaMetric
635- )
636- for metric_alarm in metric_alarms :
637- yield metric_alarm .bind (self , handler_name )
633+ for handler_name , handler in self .event_source_handlers .items ():
634+ try :
635+ metric_alarms = getattr (handler , 'metric_alarms' )
636+ except AttributeError :
637+ metric_alarms = (
638+ self .metric_alarm (metric = metric , threshold = 0 , period = 5 * 60 )
639+ for metric in LambdaMetric
640+ )
641+ for metric_alarm in metric_alarms :
642+ yield metric_alarm .bind (self , handler_name )
638643
639644 # noinspection PyPep8Naming
640645 @attrs .frozen
@@ -650,20 +655,25 @@ class retry(HandlerDecorator):
650655 num_retries : int
651656
652657 def __call__ (self , f ):
653- assert isinstance (f , chalice . app . EventSourceHandler ), f
658+ assert isinstance (f , EventSourceHandler ), f
654659 setattr (f , 'retry' , self )
655660 return f
656661
657662 @property
658663 def retries (self ) -> Iterator [retry ]:
659- for handler_name , handler in self .handler_map .items ():
660- if isinstance (handler , chalice .app .EventSourceHandler ):
661- try :
662- retry = getattr (handler , 'retry' )
663- except AttributeError :
664- pass
665- else :
666- yield retry .bind (self , handler_name )
664+ for handler_name , handler in self .event_source_handlers .items ():
665+ try :
666+ retry = getattr (handler , 'retry' )
667+ except AttributeError :
668+ pass
669+ else :
670+ yield retry .bind (self , handler_name )
671+
672+ @property
673+ def tf_function_resource_names (self ) -> Iterator [str ]:
674+ yield self .unqualified_app_name
675+ for handler_name in self .event_source_handlers :
676+ yield f'{ self .unqualified_app_name } _{ handler_name } '
667677
668678 def default_routes (self ):
669679
0 commit comments