def _maybe_add_deletion_policy_to_implicit_api()

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"