def lambda_handler()

in cosmos-db-migration-utility/src/lambda/batch-request-reader/lambda_function.py [0:0]


def lambda_handler(event, context):
    logger.info("Lambda: batch-request-reader was invoked with event: %s.", event)
    try:
        data = {}
        payload = {}
        first_one = True
        for record in event['Records']:
            payload = record["body"]
            request = json.loads(payload)
            # TODO: in some weird case scenarios I am receiving a string even after loading
            if type(request) == str:
                request = json.loads(request)
            logger.info("Completed loading payload information from message: %s.", json.dumps(request))
            if first_one:
                data = process_request(request)
                first_one = False
            else:
                # process only one. send the payload back to the queue again
                logger.info("Found more than one message in the request. Resending it back to queue. Request: %s.", json.dumps(request))
                send_sqs_message("read-batch-request-queue", request, randint(0,5))
        logging.info("Successfully completed processing batch-request-reader sqs messages. Result: %s.", json.dumps(data))
        return data  
    except Exception as e:
        stack_trace = traceback.format_stack()
        data = {
            "status": "error",
            "input": payload,
            "output": {
                "operation": "batch-request-reader",
                "error": str(e),
                "stack_trace": stack_trace
            }
        }
        logging.error("Failed while processing batch-request-reader messages. Result: %s.", json.dumps(data))
        raise