in samtranslator/plugins/api/implicit_api_plugin.py [0:0]
def _maybe_add_update_replace_policy_to_implicit_api(self, template_dict): # type: ignore[no-untyped-def]
"""
Decides whether to add an update replace 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_update_replace_policies = self.api_update_replace_policies.get(self.IMPLICIT_API_LOGICAL_ID)
if not implicit_api_update_replace_policies:
return
# Add a update replace policy to the API resource if its resources contains UpdateReplacePolicy.
at_least_one_resource_method = len(implicit_api_update_replace_policies) > 0
one_resource_method_contains_update_replace_policy = False
contains_retain = False
contains_snapshot = False
contains_delete = False
# If multiple functions with multiple different policies reference the Implicit Api,
# we set UpdateReplacePolicy to Retain if Retain is present in one of the functions,
# Snapshot if Snapshot is present, else Delete if Delete is present
for iterated_policy in implicit_api_update_replace_policies:
if iterated_policy:
one_resource_method_contains_update_replace_policy = True
if iterated_policy == "Retain":
contains_retain = True
if iterated_policy == "Snapshot":
contains_snapshot = True
if iterated_policy == "Delete":
contains_delete = True
if at_least_one_resource_method and one_resource_method_contains_update_replace_policy:
implicit_api_resource = template_dict.get("Resources").get(self.IMPLICIT_API_LOGICAL_ID)
if contains_retain:
implicit_api_resource["UpdateReplacePolicy"] = "Retain"
elif contains_snapshot:
implicit_api_resource["UpdateReplacePolicy"] = "Snapshot"
elif contains_delete:
implicit_api_resource["UpdateReplacePolicy"] = "Delete"