in pipeline/ocr/fn-call-textract/main.py [0:0]
def handler(event, context):
logger.info("Received event: %s", event)
task_token = event.get("TaskToken")
try:
if "Input" in event:
return handle_request(event, context)
elif "JobId" in event:
# Direct callback
return handle_callback(event, context)
elif "Records" in event:
# Batched callback (e.g. from SNS)
result = {"Records": []}
for ix, record in enumerate(event["Records"]):
if "EventSource" not in record:
raise MalformedRequest(
"Record %s does not specify required field 'EventSource'",
ix,
)
# TODO: Support messages via SQS too
if record["EventSource"] != "aws:sns" or not isinstance(
record.get("Sns", {}).get("Message"), str
):
raise MalformedRequest(
"Record %s must have EventSource='aws:sns' and string prop Sns.Message",
ix,
)
result["Records"].append(
handle_callback(json.loads(record["Sns"]["Message"]), context),
)
return result
else:
raise MalformedRequest(
"Event did not contain 'Input' (for new analysis request), 'JobId' (for direct "
"callback) or 'Records' (for callback from SNS/SQS). Please check your input "
"payload."
)
except Exception as e:
return send_error(e, task_token)