def lambda_handler()

in approve-request/app.py [0:0]


def lambda_handler(event,context):
    logger.info(json.dumps(event))
    success_responseData = {
    "Status" : "SUCCESS",
    "Reason" : "Approved",
    "UniqueId" : 'None',
    "Data" : "Owner approved the stack creation"
    }
    if event['queryStringParameters'] and 'requestId' in event['queryStringParameters'] and 'requestStatus' in event['queryStringParameters']:
        
        request_id = event['queryStringParameters']['requestId']
        request_status = event['queryStringParameters']['requestStatus']
        success_responseData['UniqueId'] = request_id
        request = get_request_item(request_id)
        requested_amt = request['pricingInfoAtRequest']['EstCurrMonthPrice']
        business_entity_id = request['businessEntityId']
        budget = get_budgets_for_request(business_entity_id)
        accrued_blocked = budget['accruedBlockedSpend']
        accrued_forecast = budget['accruedForecastedSpend']
        accrued_approved = budget['accruedApprovedSpend']
        requested_amt_monthly = request['pricingInfoAtRequest']['31DayPrice']
        wait_url = request['stackWaitUrl']        
        try:
            logger.info("Accruals before processing the request Blocked: {}, Forcasted: {}, Approved: {}".format(accrued_blocked, accrued_forecast, accrued_approved))
            if request['requestStatus'] == 'PENDING' or request['requestStatus'] == 'BLOCKED' :
                if  request_status == "Approve":
                    success_responseData['Status'] = "SUCCESS"
                    update_approval_request_status(request_id)
                    # Recalcuate the accruals and move the requested amt to forecasted from blocked
                    accrued_blocked = accrued_blocked - requested_amt_monthly
                    accrued_forecast = accrued_forecast + requested_amt
                    accrued_approved = accrued_approved + (requested_amt_monthly - requested_amt)
                    update_accrued_amt(business_entity_id, accrued_forecast, accrued_blocked, accrued_approved)
                elif request_status == "Reject":
                    success_responseData['Status'] = "FAILURE"
                    success_responseData['Reason'] = "Rejected"
                    success_responseData['Data'] = "Admin rejected the stack"
                    update_rejection_request_status(request_id)
                    # Remove the blocked amount since request is rejected
                    accrued_blocked = accrued_blocked - requested_amt_monthly
                    update_accrued_amt(business_entity_id, accrued_forecast, accrued_blocked, accrued_approved)

                response = requests.put(wait_url, data=json.dumps(success_responseData))
                logger.info("Successfully responded for waithandle with response: {}".format(response))
            else:
                logger.info('Request can abe approved/rejected only when it is in blocked or pending state')
        except Exception as e:
            logger.error("Failed approving the request: {}".format(e))
        response = {"data":'Successfully Processed the request'}
        return {'statusCode':'200','body':json.dumps(response)}
    else:
        response = {"error":'Mandatory request paramters not found' }
        return {'statusCode':'200','body':json.dumps(response)}