1313)
1414
1515from azul import (
16- JSON ,
1716 R ,
1817 cache ,
1918 config ,
@@ -38,7 +37,6 @@ class Lambda:
3837 name : str
3938 role : str
4039 slot_location : Optional [str ]
41- version : str
4240
4341 @property
4442 def is_contribution_lambda (self ) -> bool :
@@ -84,15 +82,13 @@ def has_notification_queue(handler) -> bool:
8482 def from_response (cls , response : 'FunctionConfigurationTypeDef' ) -> Self :
8583 name = response ['FunctionName' ]
8684 role = response ['Role' ]
87- version = response ['Version' ]
8885 try :
8986 slot_location = response ['Environment' ]['Variables' ]['AZUL_TDR_SOURCE_LOCATION' ]
9087 except KeyError :
9188 slot_location = None
9289 return cls (name = name ,
9390 role = role ,
94- slot_location = slot_location ,
95- version = version )
91+ slot_location = slot_location )
9692
9793 def __attrs_post_init__ (self ):
9894 if self .slot_location is None :
@@ -109,65 +105,27 @@ class Lambdas:
109105 def _lambda (self ):
110106 return aws .lambda_
111107
112- def list_lambdas (self ,
113- deployment : str
114- ) -> list [Lambda ]:
115- """
116- Return a list of AWS Lambda functions. Only the largest numbered version
117- of each function will be included in the list.
118-
119- :param deployment: Limit output to the specified deployment stage. If
120- 'ALL', functions from all deployments will be
121- returned.
122- """
123- paginator = self ._lambda .get_paginator ('list_functions' )
124- lambda_prefixes = None if deployment == 'ALL' else [
125- config .qualified_resource_name (lambda_name , stage = deployment )
126- for lambda_name in config .lambda_names ()
127- ]
128- functions : dict [str , JSON ] = dict ()
129- for response in paginator .paginate (FunctionVersion = 'ALL' ):
130- for function in response ['Functions' ]:
131- version = function ['Version' ]
132- version = None if version == '$LATEST' else int (version )
133- if version and (lambda_prefixes is None or any (
134- function ['FunctionName' ].startswith (prefix )
135- for prefix in lambda_prefixes
136- )):
137- name = function ['FunctionName' ]
138- previous_function = functions .get (name )
139- if previous_function is None or version > int (previous_function ['Version' ]):
140- functions [name ] = function
108+ def list_lambdas (self ) -> list [Lambda ]:
141109 return [
142110 Lambda .from_response (function )
143- for function in functions .values ()
111+ for response in self ._lambda .get_paginator ('list_functions' ).paginate ()
112+ for function in response ['Functions' ]
144113 ]
145114
146- def get_function (self , function_name : str ) -> JSON :
147- """
148- Return the Lambda client `get_function()` response for the largest
149- numbered version of the Lambda function.
150- """
151- paginator = self ._lambda .get_paginator ('list_versions_by_function' )
152- params = {'FunctionName' : function_name }
153- version = max ([
154- int (function ['Version' ])
155- for response in paginator .paginate (** params )
156- for function in response ['Versions' ]
157- if function ['Version' ] != '$LATEST'
158- ])
159- return self ._lambda .get_function (FunctionName = function_name ,
160- Qualifier = str (version ))
161-
162115 def manage_lambdas (self , enabled : bool ):
163- for function in self .list_lambdas (deployment = config .deployment_stage ):
164- self .manage_lambda (function .name , enabled )
116+ lambda_prefixes = [
117+ config .qualified_resource_name (lambda_infix )
118+ for lambda_infix in config .lambda_names ()
119+ ]
120+ assert all (lambda_prefixes )
121+ for lambda_ in self .list_lambdas ():
122+ if any (lambda_ .name .startswith (prefix ) for prefix in lambda_prefixes ):
123+ self .manage_lambda (lambda_ .name , enabled )
165124
166125 def manage_lambda (self , lambda_name : str , enable : bool ):
167- lambda_settings = self .get_function (function_name = lambda_name )
126+ lambda_settings = self ._lambda . get_function (FunctionName = lambda_name )
168127 lambda_arn = lambda_settings ['Configuration' ]['FunctionArn' ]
169128 # Lambda does not support adding tags to function aliases or versions
170- lambda_arn , _ , _ = lambda_arn .rpartition (':' )
171129 lambda_tags = self ._lambda .list_tags (Resource = lambda_arn )['Tags' ]
172130 lambda_name = lambda_settings ['Configuration' ]['FunctionName' ]
173131 if enable :
@@ -211,7 +169,7 @@ def reset_lambda_roles(self):
211169 client = self ._lambda
212170 lambda_names = set (config .lambda_names ())
213171
214- for lambda_ in self .list_lambdas (deployment = 'ALL' ):
172+ for lambda_ in self .list_lambdas ():
215173 for lambda_name in lambda_names :
216174 if lambda_ .name .startswith (config .qualified_resource_name (lambda_name )):
217175 other_lambda_name = one (lambda_names - {lambda_name })
0 commit comments