def put_challenge_frame()

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'}