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