def handle_transform()

in Explode/lambda/explode.py [0:0]


def handle_transform(template):
    """Go through template and explode resources."""
    mappings = template['Mappings']
    resources = template['Resources']
    new_resources = {}
    for resource_name, resource in resources.items():
        try:
            explode_map = resource['ExplodeMap']
            del resource['ExplodeMap']
        except KeyError:
            # This resource does not have an ExplodeMap, so copy it verbatim
            # and move on
            new_resources[resource_name] = resource
            continue
        try:
            explode_map_data = mappings[explode_map]
        except KeyError:
            # This resource refers to a mapping entry which doesn't exist, so
            # fail
            print('Unable to find mapping for exploding resource {}'.format(resource_name))
            raise
        resource_instances = explode_map_data.keys()
        for resource_instance in resource_instances:
            new_resource = walk_resource(resource, explode_map_data[resource_instance])
            if 'ResourceName' in explode_map_data[resource_instance]:
                new_resource_name = explode_map_data[resource_instance]['ResourceName']
            else:
                new_resource_name = resource_name + resource_instance
            new_resources[new_resource_name] = new_resource
    template['Resources'] = new_resources
    return template