def update_termination_request_status()

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


def update_termination_request_status(request_id):
    logger.info('Received termination request for stack id: {}'.format(request_id))
    existing_req = budgets_table.get_item(
        Key={'partitionKey':partition_key, 'rangeKey':request_id},
        ProjectionExpression='requestStatus, businessEntity, businessEntityId, pricingInfoAtRequest'
    )
    if 'Item' not in existing_req:
        return False
    logger.info('Fetched Request Item from Database: {}'.format(existing_req['Item']))
    requested_amt = existing_req['Item']['pricingInfoAtRequest']['EstCurrMonthPrice']
    requested_amt_monthly = existing_req['Item']['pricingInfoAtRequest']['31DayPrice']
    business_entity_id = existing_req['Item']['businessEntityId']
    request_status = existing_req['Item']['requestStatus']
    
    # if status is pending/rejected/blocked, then deduct from accrued blocked amt
    if len(business_entity_id) > 0 and (request_status == 'PENDING' or request_status == 'BLOCKED'):
        logger.info('Adjusting Accruals since request is in {} state'.format(request_status))
        budget_info = budgets_table.get_item(
            Key={'partitionKey':budget_parititon_key, 'rangeKey':business_entity_id},
            ProjectionExpression='accruedBlockedSpend'
        )
        accrued_blocked_spend = budget_info['Item']['accruedBlockedSpend']
        accrued_blocked_spend = accrued_blocked_spend - requested_amt_monthly
        logger.info("Clear the blocked amt if exists")
        response = budgets_table.update_item(
            Key={'partitionKey': budget_parititon_key, 'rangeKey': business_entity_id},
            UpdateExpression = "set accruedBlockedSpend=:b",
            ExpressionAttributeValues={
                ':b': accrued_blocked_spend
            },  
        ReturnValues="UPDATED_NEW")
        logger.info("Blocked amount cleared successfully: {}".format(response))
    update_expression =  "set resourceTerminationTime=:a, resourceStatus=:r"
    expression_attributes = {
        ':a': str(datetime.utcnow()),
        ':r': 'TERMINATED'
    }
    if request_status == 'PENDING' or request_status == 'BLOCKED' or request_status == 'SAVED' :
        update_expression =  update_expression+", requestStatus=:c"
        expression_attributes[':c'] = 'REJECTED_SYSTEM'
    elif request_status != 'REJECTED_ADMIN':
        update_expression =  update_expression+", requestStatus=:c"
        expression_attributes[':c'] = request_status+'_TERMINATED'
    response = budgets_table.update_item(
        Key={'partitionKey': partition_key, 'rangeKey':request_id},
        UpdateExpression=update_expression,
        ExpressionAttributeValues=expression_attributes,
        ReturnValues="UPDATED_NEW")
    logger.debug("UpdateItem succeeded:")
    logger.debug(json.dumps(response)) 
    return True