in source/backend/lambda_stage_attr/lambda_stage_attr.py [0:0]
def lambda_handler(event, context):
print(event)
if event['httpMethod'] == 'GET':
resp = stages_table.get_item(Key={'stage_id': event['pathParameters']['stage_id']})
if 'Item' in resp:
return {'headers': {'Access-Control-Allow-Origin': '*'},
'body': json.dumps(resp['Item'])}
else:
return {'headers': {'Access-Control-Allow-Origin': '*'}, 'statusCode': 400, 'body': 'stage Id: ' + str(event['pathParameters']['stage_id']) + ' does not exist'}
elif event['httpMethod'] == 'PUT':
stage_id = event['pathParameters']['stage_id']
stage_name = ""
# check if stage_id exist in stage_table
stage = stages_table.get_item(Key={'stage_id': event['pathParameters']['stage_id']})
if 'Item' not in stage:
return {'headers': {'Access-Control-Allow-Origin': '*'}, 'statusCode': 400, 'body': 'stage Id: ' + str(event['pathParameters']['stage_id']) + ' does not exist'}
try:
body = json.loads(event['body'])
if 'attributes' not in body:
return {'headers': {'Access-Control-Allow-Origin': '*'}, 'statusCode': 400, 'body': 'attribute attributes is required'}
for item in body['attributes']:
if 'attr_name' not in item:
return {'headers': {'Access-Control-Allow-Origin': '*'}, 'statusCode': 400, 'body': 'attribute attr_name is required'}
except:
return {'headers': {'Access-Control-Allow-Origin': '*'}, 'statusCode': 400, 'body': 'malformed json input'}
# Check if there is a duplicate stage_name
stages = stages_table.scan()
for s in stages['Items']:
if 'stage_name' in body:
if s['stage_name'].lower() == str(body['stage_name']).lower() and s['stage_id'] != str(event['pathParameters']['stage_id']):
return {'headers': {'Access-Control-Allow-Origin': '*'}, 'statusCode': 400, 'body': 'stage_name: ' + body['stage_name'] + ' already exist'}
stage_name = body['stage_name']
else:
stage_name = stage['Item']['stage_name']
# Get schema defination
server_attributes = []
app_attributes = []
wave_attributes = []
for schema in schema_table.scan()['Items']:
if schema['schema_name'] == "app":
for attribute in schema['attributes']:
app_attributes.append(attribute['name'])
elif schema['schema_name'] == "server":
for attribute in schema['attributes']:
server_attributes.append(attribute['name'])
elif schema['schema_name'] == "wave":
for attribute in schema['attributes']:
wave_attributes.append(attribute['name'])
print("*** Server Attributes: ***")
print(server_attributes)
print("*** App Attributes: ***")
print(app_attributes)
print("*** Wave Attributes: ***")
print(wave_attributes)
# Get attribute name in request body
attributes = []
for item in body['attributes']:
if item['attr_name'] in app_attributes:
item['attr_type'] = "app"
elif item['attr_name'] in server_attributes:
item['attr_type'] = "server"
elif item['attr_name'] in wave_attributes:
item['attr_type'] = "wave"
else:
message = 'Attribute Name: ' + item['attr_name'] + " is not defined in schema"
return {'headers': {'Access-Control-Allow-Origin': '*'},'statusCode': 400, 'body': message}
attributes.append(item['attr_name'])
resp = stages_table.put_item(
Item={
'stage_id' : stage_id,
'attributes' : body['attributes'],
'stage_name' : stage_name
}
)
return {'headers': {'Access-Control-Allow-Origin': '*'},
'statusCode': 200, 'body': json.dumps(resp)}
elif event['httpMethod'] == 'DELETE':
stage_id = ""
stages = stages_table.scan()
for stage in stages['Items']:
if str(stage['stage_id']) == str(event['pathParameters']['stage_id']):
stage_id = stage['stage_id']
if stage_id != "":
delete = stages_table.delete_item(Key={'stage_id': stage_id})
if delete['ResponseMetadata']['HTTPStatusCode'] == 200:
return {'headers': {'Access-Control-Allow-Origin': '*'},
'statusCode': 200, 'body': "stage: " + stage_id + " was successfully deleted"}
else:
return {'headers': {'Access-Control-Allow-Origin': '*'},'statusCode': resp['ResponseMetadata']['HTTPStatusCode'], 'body': json.dumps(resp)}
else:
return {'headers': {'Access-Control-Allow-Origin': '*'},'statusCode': 400, 'body': 'stage Id: ' + str(event['pathParameters']['stage_id']) + ' does not exist'}