in lambda/app.py [0:0]
def put_challenge_frame(challenge_id, request):
timestamp = int(request['timestamp'])
frame = base64.b64decode(request['frameBase64'])
frame_key = '{}/{}.jpg'.format(challenge_id, timestamp)
# Updating challenge on DynamoDB table
try:
table.update_item(
Key={'id': challenge_id},
UpdateExpression='set #frames = list_append(if_not_exists(#frames, :empty_list), :frame)',
ExpressionAttributeNames={'#frames': 'frames'},
ExpressionAttributeValues={
':empty_list': [],
':frame': [{
'timestamp': timestamp,
'key': frame_key
}]
},
ConditionExpression='attribute_exists(userId)',
ReturnValues='NONE'
)
except ClientError as error:
if error.response['Error']['Code'] == 'ConditionalCheckFailedException':
return 404, {'message': 'Challenge not found'}
raise error
# Uploading frame to S3 bucket
s3.put_object(
Body=frame,
Bucket=bucket_name,
Key=frame_key
)
return 200, {'message': 'Frame saved successfully'}