def deleteDerivative(derivative_id):
    # Verify request
    if not request.data or not request.is_json:
        return abort(400, 'empty request body')

    # Retreive json body from request
    body = request.get_json()
    user_id = body.get('user_id')

    # Verify user exists
    if user_management.getUser(user_id) is None:
        return abort(404, f'user id {user_id} does not exist')

    # Retreive derivative from database
    derivative = derivative_management.getDerivative(derivative_id)

    # Verify derivative exists
    if derivative is None:
        return abort(404, f'derivative id {derivative_id} does not exist')

    # Delete the derivative
    try:
        derivative_management.deleteDerivative(derivative, user_id)
    except AbsoluteDerivativeException:
        return abort(400, 'derivative is absolute, deletion denied')

    # Commit the deletion
    db.session.commit()

    # Return a 204, no content
    return '', 204
Exemplo n.º 2
0
def testGetUser(dummy_user):
    # Add dummy user to database session
    db.session.add(dummy_user)
    db.session.flush()

    # Assert that getUser returns the user
    assert user_management.getUser(dummy_user.id) == dummy_user
def addDerivative():
    # Verify request
    if not request.data or not request.is_json:
        return abort(400, 'empty request body')

    # Retreive json body from request
    body = request.get_json()
    user_id = body.get('user_id')

    # Validate user id
    if user_management.getUser(user_id) is None:
        return abort(404, f'user id {user_id} does not exist')

    try:
        # Create derivative and add it to database
        derivative = Derivative(**body.get('derivative'))
        derivative_management.addDerivative(derivative, user_id)

    except IntegrityError as e:
        return abort(400, f'invalid derivative data: {e.orig}')
    except Exception as e:
        return abort(400, f'invalid derivative data: {e}')

    # Commit addition to database
    db.session.commit()

    # Make response
    return jsonify(id=derivative.id)
Exemplo n.º 4
0
def getUserActions(user_id):
    # Validate user id
    if user_management.getUser(user_id) is None:
        return abort(404, f'user id {user_id} does not exist')

    # Get user actions from database
    actions = action_management.getUserActions(user_id)

    # Make response
    return jsonify(actions=[a.id for a in actions])
Exemplo n.º 5
0
def getUser(user_id):
    """ Returns a user with user id user_id.

    Args:
        user_id (int): The ID of the user which needs to be returned.

    Returns:
        JSON: A JSON object representing user.
    """
    # Get user from database
    user = user_management.getUser(user_id)

    # Verify user exists
    if user is None:
        return abort(404, f'user with id {user_id} does not exist')

    # Make response
    return jsonify(user=user)
def updateDerivative(derivative_id):
    # Verify request
    if not request.data or not request.is_json:
        return abort(400, 'empty request body')

    # Retreive json body from request
    body = request.get_json()
    user_id = body.get('user_id')
    tree_id = body.get('tree_id')

    # Verify user exists
    if user_management.getUser(user_id) is None:
        return abort(404, f'user id {user_id} does not exist')

    # Obtain updates
    updates = body.get('updates')

    # Retreive the specified derivative
    derivative = derivative_management.getDerivative(derivative_id)

    # Verify derivative exists
    if derivative is None:
        return abort(404, f'derivative id {derivative_id} does not exist')

    # Update the derivative
    try:
        update_log = derivative_management.updateDerivative(derivative, user_id, tree_id, updates)
    except AbsoluteDerivativeException:
        return abort(400, 'derivative is absolute, update denied')

    # If no updates were made to the derivative, abort
    if not update_log:
        return abort(400, 'no valid updates')

    # Commit the derivative updates to the database
    db.session.commit()

    # Make response
    return jsonify(update_log=update_log)
Exemplo n.º 7
0
def testGetUserReturnsNoneIfNotFound(free_user_id):
    # Assert that None is returned for the free id
    assert user_management.getUser(free_user_id) is None