예제 #1
0
def get_next_recommendation():
    # we get a POST request from the client in JSON format
    # whose request body contains beer_id and beer_rating
    # token comes in "Bearer xvgsfddf" fashion as per the convention
    token = request.headers['Authorization'].split(' ')[1]
    data = request.json
    beer_id = data['beer_id']
    beer_rating = data['beer_rating']
    user_id = database.get_userid_from_string(token)
    database.save_to_profile(user_id, beer_id, beer_rating)
    recommended_beer_id = database.get_next_recommendation(user_id)
    return jsonify(database.get_metadata(recommended_beer_id))
예제 #2
0
def get_best_recommendation():
    '''
    The client sends a POST requests that represents a review of a beer we
    recommended previously. We save this rating and send back a new
    recommendation

    The client identifies itself with its unique_string which it passes
    in the request header
    '''
    try:
        unique_string = request.headers['Authorization']
    except KeyError:
        print 'client sent review without auth'
        return jsonify({}), 401

    user_id = database.get_userid_from_string(unique_string)
    if not user_id:
        print 'bad unique_string %s' % unique_string
        return jsonify({}), 401

    review = request.json
    if not review:
        print 'did not get a json review'
        return jsonify({}), 400

    try:
        beer_id = review['beer_id']
        beer_rating = review['beer_rating']
    except KeyError as missing_param:
        print 'Review missing parameter %s' % missing_param
        return jsonify({}), 400
    if not isinstance(beer_id, int) or  not isinstance(beer_rating, int):
        print 'The client shuld be passing review parameters as integers. Possibly SQL injection.'
        print beer_id, beer_rating
        return jsonify({}), 400

    database.save_to_profile(user_id, beer_id, beer_rating)

    recommended_beer_id = database.get_next_recommendation(user_id)
    database.save_recommendation(user_id,recommended_beer_id) # save the recommendation so we dont return it again
    return jsonify(database.get_metadata(recommended_beer_id))
예제 #3
0
 def test_get_next_recommendation(self):
     beer_recomendation = database.get_next_recommendation(10)
     eq_(isinstance(beer_recomendation, (int, long)), True, 'get_next_recommendation should return a beer id')
     repeat_beer_recomendation = database.get_next_recommendation(10)
     eq_(repeat_beer_recomendation, beer_recomendation, 'get_next_recommendation should be consistent')