def _maybe_add_update_replace_policy_to_implicit_api()

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"