in samtranslator/plugins/api/implicit_api_plugin.py [0:0]
def _maybe_add_deletion_policy_to_implicit_api(self, template_dict): # type: ignore[no-untyped-def]
"""
Decides whether to add a deletion policy to the implicit api resource.
:param dict template_dict: SAM template dictionary
"""
# Short-circuit if template doesn't have any functions with implicit API events
implicit_api_deletion_policies = self.api_deletion_policies.get(self.IMPLICIT_API_LOGICAL_ID)
if not implicit_api_deletion_policies:
return
# Add a deletion policy to the API resource if its resources contains DeletionPolicy.
at_least_one_resource_method = len(implicit_api_deletion_policies) > 0
one_resource_method_contains_deletion_policy = False
contains_retain = False
contains_delete = False
# If multiple functions with multiple different policies reference the Implicit Api,
# we set DeletionPolicy to Retain if Retain is present in one of the functions,
# else Delete if Delete is present
for iterated_policy in implicit_api_deletion_policies:
if iterated_policy:
one_resource_method_contains_deletion_policy = True
if iterated_policy == "Retain":
contains_retain = True
if iterated_policy == "Delete":
contains_delete = True
if at_least_one_resource_method and one_resource_method_contains_deletion_policy:
implicit_api_resource = template_dict.get("Resources").get(self.IMPLICIT_API_LOGICAL_ID)
if contains_retain:
implicit_api_resource["DeletionPolicy"] = "Retain"
elif contains_delete:
implicit_api_resource["DeletionPolicy"] = "Delete"