Beispiel #1
0
def list(id):
    """Returns a list of all favorites for the given user"""

    try:
        user = User.objects.get(id=id)
    except mongoengine.DoesNotExist:
        return flask.Response('No user with id {} found'.format(id), 404)
    except:
        return flask.Resposne('Invalid id {}'.format(id), 400)

    return JSONResponse(Favorite.objects.all().filter(user=user).to_json())
Beispiel #2
0
def post(id):
    """Creates a new favorite for the logged in user for the given beer"""

    if id != str(flask.request.user.id):
        return flask.Response(
            'You can not add a favorite beer for another user', 400)

    data = flask.request.get_json()

    if not 'beer' in data:
        return flask.Response('No beer was specified', 400)

    # find the beer
    try:
        beer = Beer.objects.get(id=data['beer'])
    except mongoengine.DoesNotExist:
        return flask.Resposne('No beer with id {} found'.format(data['beer']),
                              404)
    except:
        return flask.Resposne('Invalid beer id {}'.format(data['beer']), 400)

    # check to see if a favorite was already created for this beer from this
    # user
    try:
        Favorite.objects.get(beer=beer, user=flask.request.user)
    except mongoengine.DoesNotExist:
        pass
    else:
        return flask.Response(
            'You\'ve already favorited beer {}'.format(data['beer']), 400)

    favorite = Favorite(user=flask.request.user, beer=beer)
    try:
        favorite.save()
    except mongoengine.ValidationError as exp:
        return flask.Response('{}'.format(exp), 400)

    return JSONResponse(favorite.to_json())
Beispiel #3
0
def get(id, rid):
    """Returns the given review for the given beer by ids"""

    try:
        beer = Beer.objects.get(id=id)
    except mongoengine.DoesNotExist:
        return flask.Response('Failed to find a beer with id {}'.format(id),
                              404)
    except:
        return flask.Response('Invalid beer id {}'.format(id), 400)

    try:
        review = Review.objects.get(id=rid, beer=beer)
    except mongoengine.DoesNotExist:
        return flask.Resposne('Failed to find a review with id {}'.format(id),
                              404)
    except:
        return flask.Response('Invalid review id {}'.format(rid), 400)

    return JSONResponse(review.to_json())
Beispiel #4
0
def get(id, fid):
    """Returns the given favorite for the given user by ids"""

    try:
        user = User.objects.get(id=id)
    except mongoengine.DoesNotExist:
        return flask.Response('Failed to find a user with id {}'.format(id),
                              404)
    except:
        return flask.Response('Invalid user id {}'.format(id), 400)

    try:
        favorite = Favorite.objects.get(id=fid, user=user)
    except mongoengine.DoesNotExist:
        return flask.Resposne(
            'Failed to find a favorite with id {}'.format(fid), 404)
    except:
        return flask.Response('Invalid favorite id {}'.format(fid), 400)

    return JSONResponse(favorite.to_json())
Beispiel #5
0
def list(id):
    """Returns a list of all reviews for the given beer"""

    try:
        beer = Beer.objects.get(id=id)
    except mongoengine.DoesNotExist:
        return flask.Response('No beer with id {} found'.format(id), 404)
    except:
        return flask.Resposne('Invalid id {}'.format(id), 400)

    reviews = Review.objects.all().filter(beer=beer)

    if 'sort' in flask.request.values:
        props = [
            'aroma', 'appearance', 'taste', 'palate', 'bottle_style', 'overall'
        ]

        keys = get_sort_keys(flask.request.values['sort'].split(','), props)

        if len(keys) > 0:
            reviews = reviews.order_by(*keys)

    return JSONResponse(reviews.to_json())
Beispiel #6
0
def put(id, rid):
    """Updates the given review for a beer by ids"""

    try:
        beer = Beer.objects.get(id=id)
    except mongoengine.DoesNotExist:
        return flask.Response('No beer with id {} found'.format(id), 404)
    except:
        return flask.Resposne('Invalid beer id {}'.format(id), 400)

    try:
        review = Review.objects.get(id=rid, beer=beer)
    except mongoengine.DoesNotExist:
        return flask.Response('No review with id {} found'.format(rid), 404)
    except:
        return flask.Response('Invalid review id {}'.format(id), 400)

    data = flask.request.get_json()

    # update an of our simple fields
    props = ['aroma', 'appearance', 'taste', 'palate', 'bottle_style']
    for item in props:
        if item in data:
            setattr(review, item, data[item])

    review.calculate()

    try:
        review.save()
    except mongoengine.ValidationError as exp:
        return flask.Response('{}'.format(exp), 400)

    beer.rating = Review.objects.all().filter(beer=beer).average('overall')
    beer.save()

    return JSONResponse(review.to_json())