Ejemplo n.º 1
0
def create(review_id, text=None, rating=None):
    """Creates a new revision for the given review.

    Args:
        review_id (uuid): ID of the review.
        text (str): Updated/New text part of the review.
        rating (int): Updated/New rating part of the review
    """
    if text is None and rating is None:
        raise db_exceptions.BadDataException("Text part and rating part of a revision can not be None simultaneously")
    if rating not in VALID_RATING_VALUES:
        raise ValueError("{} is not a valid rating value. It must be on the scale 1-5".format(rating))
    # Convert ratings to values on a scale 0-100
    rating = RATING_SCALE_0_100.get(rating)

    with db.engine.connect() as connection:
        connection.execute(sqlalchemy.text("""
            INSERT INTO revision(review_id, timestamp, text, rating)
                 VALUES (:review_id, :timestamp, :text, :rating)
        """), {
            "review_id": review_id,
            "timestamp": datetime.now(),
            "text": text,
            "rating": rating,
        })

    # Update average rating if rating part of the review has changed
    review = db_review.get_by_id(review_id)
    rev_num = get_revision_number(review["id"], review["last_revision"]["id"])
    if rev_num > 1:
        revisions = get(review["id"], limit=2, offset=0)
        if revisions[0]["rating"] != revisions[1]["rating"]:
            db_avg_rating.update(review["entity_id"], review["entity_type"])
    elif rating is not None:
        db_avg_rating.update(review["entity_id"], review["entity_type"])
Ejemplo n.º 2
0
def update_rating(review_id):
    # Update average rating if rating part of the review has changed
    review = db_review.get_by_id(review_id)
    rev_num = get_revision_number(review["id"], review["last_revision"]["id"])
    if rev_num > 1:
        revisions = get(review["id"], limit=2, offset=0)
        if revisions[0]["rating"] != revisions[1]["rating"]:
            db_avg_rating.update(review["entity_id"], review["entity_type"])
    else:
        db_avg_rating.update(review["entity_id"], review["entity_type"])
Ejemplo n.º 3
0
def delete(review_id):
    """Delete a review.

    Args:
        review_id: ID of the review to be deleted.
    """
    review = get_by_id(review_id)
    with db.engine.connect() as connection:
        connection.execute(sqlalchemy.text("""
            DELETE
              FROM review
             WHERE id = :review_id
        """), {
            "review_id": review_id,
        })

    if review["rating"] is not None:
        db_avg_rating.update(review["entity_id"], review["entity_type"])
Ejemplo n.º 4
0
def delete(review_id):
    """Delete a review.

    Args:
        review_id: ID of the review to be deleted.
    """
    review = get_by_id(review_id)
    with db.engine.connect() as connection:
        connection.execute(sqlalchemy.text("""
            DELETE
              FROM review
             WHERE id = :review_id
        """), {
            "review_id": review_id,
        })

    if review["rating"] is not None:
        db_avg_rating.update(review["entity_id"], review["entity_type"])
Ejemplo n.º 5
0
def set_hidden_state(review_id, *, is_hidden):
    """Hide or reveal a review.

    Args:
        review_id (uuid): ID of the review the state of which needs to be changed.
        is_hidden (bool): True if review has to be hidden, False if not.
    """
    review = get_by_id(review_id)
    with db.engine.connect() as connection:
        connection.execute(sqlalchemy.text("""
            UPDATE review
               SET is_hidden = :is_hidden
             WHERE id = :review_id
        """), {
            "review_id": review_id,
            "is_hidden": is_hidden,
        })

    # update the average rating
    if review["rating"] is not None:
        db_avg_rating.update(review["entity_id"], review["entity_type"])
Ejemplo n.º 6
0
def set_hidden_state(review_id, *, is_hidden):
    """Hide or reveal a review.

    Args:
        review_id (uuid): ID of the review the state of which needs to be changed.
        is_hidden (bool): True if review has to be hidden, False if not.
    """
    review = get_by_id(review_id)
    with db.engine.connect() as connection:
        connection.execute(sqlalchemy.text("""
            UPDATE review
               SET is_hidden = :is_hidden
             WHERE id = :review_id
        """), {
            "review_id": review_id,
            "is_hidden": is_hidden,
        })

    # update the average rating
    if review["rating"] is not None:
        db_avg_rating.update(review["entity_id"], review["entity_type"])