def lambda_handler()

in cdk-iot-analytics/cdk_sap_blog/sap/lambda_assets/function_code/lambda_function.py [0:0]


def lambda_handler(event, context):
    print(f"event: {event}")
    
    sapcred=json.loads(_get_secret())
    sapUser=sapcred["username"]
    sapPassword=sapcred["password"]
    
    # Retrieve the CSRF token first
    url = _get_base_url()
    session = requests.Session()

    try:
        response = session.head(url, auth=HTTPBasicAuth(sapUser,sapPassword), headers={'x-csrf-token': 'fetch'})
        token = response.headers.get('x-csrf-token', '')
        print(f"SAP session response text: {response.text}")
        
    except (requests.exceptions.ConnectTimeout, requests.exceptions.ConnectionError) as err:
        print("Connection to SAP System timed out: " + str(err.__class__.__name__))
        print("Is this the correct hostname and port number?")
        sys.exit(1)
    
    print(f"SAP session response code: {response.status_code}")

    # Execute Post request
    try:
        url = _get_base_url() + "/" + odpEntitySetName
        headers = {
            "Content-Type" : "application/json; charset=utf-8",
            "X-CSRF-Token" : token
        }

        print(f"SAP POST url: {url}")
        print(f"SAP POST headers: {headers}")
        print(f"SAP POST body: {event}")

        response = session.post(
            url,
            auth=HTTPBasicAuth(sapUser,sapPassword),
            headers=headers,
            json=event,
            verify=False
        )

        print(f"SAP POST response: {response}")
        print(f"SAP POST response code: {response.status_code}")
        print(f"SAP POST response text: {response.text}")
        print(f"SAP POST response headers: {response.headers}")

        if response.status_code == 201:
            message = (response.headers["sap-message"])
            print("Data successfully created in SAP")
            print(response.headers["sap-message"])
            try:
                tmp = v = xml.parse(message)
                message = (f"SAP Service {tmp['notification']['message']} for temperature alarm!")
            except Exception as exc:
                print(f'xml parser failed: {exc}')
            sns_client.publish(
                TopicArn=snsAlertEmailTopic,
                Message=message
            )
        
    except (requests.exceptions.ConnectTimeout, requests.exceptions.ConnectionError) as err:
        print("Connection to SAP System timed out: " + str(err.__class__.__name__))
        print("Is this the correct hostname and port number?")
        sys.exit(1)
  
    print(response.status_code)