in lex_exporter/create_lex_template.py [0:0]
def create_resource(resource_type,
lex_list_function,
lex_get_details_function,
lex_type,
service_token,
name_contains,
dependent_resources=[]):
marker = None
iterator = lex_list_function(nameContains=name_contains, PaginationConfig={
'MaxItems': 1000,
'PageSize': 10,
'StartingToken': marker
})
suffix = resource_type.split("::")[1]
created_resources = []
for type in iterator:
types = type[lex_type]
for resource in types:
type_definition = lex_get_details_function(name=resource["name"])
type_definition["createVersion"] = True
resource_name = re.sub(r'[\W_]+', '', resource["name"])+suffix
print(f"Creating Resource "+ resource_name)
created_resources.append(resource_name)
template["Resources"].update(
{resource_name: {
"Type": resource_type,
"Properties": {
"ServiceToken": {"Fn::ImportValue": service_token}
}
}})
excluded_properties = ["ResponseMetadata", "lastUpdatedDate", "createdDate", "checksum", "version", "status"]
keys_to_add = list(type_definition.keys() - set(excluded_properties))
properties_to_add = list(map(lambda x: {x: type_definition[x]}, keys_to_add))
template["Resources"][resource_name]["Properties"].update(reduce(lambda a, b: dict(a, **b), properties_to_add))
if len(created_resources) != 0:
template["Resources"][resource_name]["DependsOn"] = list(set(dependent_resources) - set([resource_name]))
dependent_resources.append(resource_name) # Hopefully prevents throttling by limiting the number of parallel requests
return created_resources