in samtranslator/plugins/application/serverless_app_plugin.py [0:0]
def on_after_transform_template(self, template): # type: ignore[no-untyped-def]
"""
Hook method that gets called after the template is processed
Go through all the stored applications and make sure they're all ACTIVE.
:param dict template: Dictionary of the SAM template
"""
if not self._wait_for_template_active_status or self._validate_only:
return
while self._total_wait_time < self.TEMPLATE_WAIT_TIMEOUT_SECONDS:
# Check each resource to make sure it's active
LOG.info("Checking resources in serverless application repo...")
idx = 0
while idx < len(self._in_progress_templates):
application_id, template_id = self._in_progress_templates[idx]
try:
response = self._sar_service_call(
self._get_cfn_template, application_id, application_id, template_id
)
except ClientError as e:
error_code = e.response["Error"]["Code"]
if error_code == "TooManyRequestsException":
LOG.debug(f"SAR call timed out for application id {application_id}")
break # We were throttled by SAR, break out to a sleep
raise e
if self._is_template_active(response, application_id, template_id):
self._in_progress_templates.remove((application_id, template_id))
else:
idx += 1 # check next template
LOG.info("Finished checking resources in serverless application repo.")
# Don't sleep if there are no more templates with PREPARING status
if len(self._in_progress_templates) == 0:
break
# Sleep a little so we don't spam service calls
sleep_time = self._get_sleep_time_sec()
sleep(sleep_time)
self._total_wait_time += sleep_time
# Not all templates reached active status
if len(self._in_progress_templates) != 0:
application_ids = [items[0] for items in self._in_progress_templates]
raise InvalidResourceException(
application_ids, "Timed out waiting for nested stack templates to reach ACTIVE status."
)