import datetime
import boto3
from jinja2 import Template
def lambda_handler(event, context):
locations_to_plot = event["locations_to_plot"]
s3_bucket = event["s3_bucket"]
s3_folder = event["s3_folder"]
identity_pool_id = event["identity_pool_id"]
map_name = event["map_name"]
html_map_template = """
"""
template = Template(html_map_template)
markers = []
for location_to_plot in locations_to_plot:
markers.append(
"""
var marker = new mapboxgl.Marker()
.setLngLat({0})
.setPopup(new mapboxgl.Popup().setHTML("{1}
"))
.addTo(map);
//marker.togglePopup(); // toggle popup open or closed
""".format(
location_to_plot["coordinates"], location_to_plot["label"]
),
)
html_map = template.render(
markers=markers, identity_pool_id=identity_pool_id, map_name=map_name
)
# Generate map and upload to S3
filename_map = "map_{}.html".format(datetime.datetime.utcnow().isoformat())
client = boto3.client("s3")
response = client.put_object(
Bucket=s3_bucket, Body=html_map, Key=s3_folder + filename_map, ContentType='text/html'
)
print(response)
# Generate a presigned URL for the S3 object
response = client.generate_presigned_url(
"get_object",
Params={"Bucket": s3_bucket, "Key": s3_folder + filename_map},
ExpiresIn=3600,
)
# The response contains the presigned URL
print(response)
return {"link_map": response}