def handle_template()

in aws/services/CloudFormation/MacrosExamples/S3Objects/lambda/macro.py [0:0]


def handle_template(request_id, template):
    new_resources = {}

    for name, resource in list(template.get("Resources", {}).items()):
        if resource["Type"] == "AWS::S3::Object":
            props = resource["Properties"]

            if (
                len(
                    [
                        prop
                        for prop in resource["Properties"]
                        if prop in ["Body", "Base64Body", "Source"]
                    ]
                )
                != 1
            ):
                raise Exception(
                    "You must specify exactly one of: Body, Base64Body, Source"
                )

            target = props["Target"]

            if "ACL" not in target:
                target["ACL"] = "private"

            resource_props = {
                "ServiceToken": LAMBDA_ARN,
                "Target": target,
            }

            if "Body" in props:
                resource_props["Body"] = props["Body"]

            elif "Base64Body" in props:
                resource_props["Base64Body"] = props["Base64Body"]

            elif "Source" in props:
                resource_props["Source"] = props["Source"]

            new_resources[name] = {
                "Type": "Custom::S3Object",
                "Version": "1.0",
                "Properties": resource_props,
            }

    for name, resource in list(new_resources.items()):
        template["Resources"][name] = resource

    return template