import json import urllib.parse from typing import Dict from internal.queries import http_query, exec_endpoint from internal.commons import DP_URL import logging log = logging.getLogger() log.setLevel(logging.INFO) # DP_URL = "http://172.31.36.151:12345/" # for "live" local testing through test-thing. # DP_URL = "http://172.31.36.151:22345/" # for "live" local testing through test-thing. - Aleks def make_s3_event_params(event: Dict, req: Dict) -> Dict: # Get the object description from the event try: event_source = event['eventSource'] event_name = event['eventName'] bucket = event['s3']['bucket']['name'] key = urllib.parse.unquote_plus(event['s3']['object']['key'], encoding='utf-8') log.info(f"Event:{event_name}, Bucket:{bucket}, Key:{key}") except KeyError as e: log.exception("Received unknown event, didn't handle correctly: " + json.dumps(event, indent=2), exc_info=e) raise e req.update({ "async_source": f"{event_source}.{event_name}", "event_name": event_name, "bucket": bucket, "key": key }) return req endpoint = {"url": DP_URL + "async_notify", "method": "POST", "pre_filters": [make_s3_event_params], "query": http_query } def lambda_handler(event, context): try: for evt in event['Records']: internal_request = {} try: exec_endpoint(endpoint, evt, internal_request) except Exception as e: log.exception(f"Endpoint: {endpoint} :: {internal_request}", exc_info=e) except Exception as e: log.exception("Received unknown event, didn't handle correctly: " + json.dumps(event, indent=2), exc_info=e)