def handler()

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)