diff options
-rw-r--r-- | app.py | 42 | ||||
-rw-r--r-- | templates/beerpage.jinja2 | 14 | ||||
-rw-r--r-- | utils.py | 6 |
3 files changed, 35 insertions, 27 deletions
@@ -3,6 +3,7 @@ from flask import render_template from flask import redirect from flask import request from flask import url_for +from utils import get_closest import json import random import re @@ -41,23 +42,35 @@ def get_beer_details(brewery_id, beer_id): 'Barnyardy', 'Woody', 'Smoky', 'Roasty', 'Yeasty', 'Sweet', 'Juicy', 'Light', 'Thin', 'Spicy', 'Dry', 'Fruity', 'Herbal', 'Salty'] + similar_beers = get_closest(brewery_id + '-' + beer_id) + similar_beer_objects = [] + for item in similar_beers: + item_result, item_brewer = beer_lookup(item) + similar_beer_objects.append(BeerInfo(item, item_brewer, item_result)) + if request.method == 'POST': - similar_beers = [] attr = request.form['attr'] direction = request.form['direction'] return render_template('beerpage.jinja2', beer_data=beerinfo, attrs=attrs, - similar_beers=similar_beers, attr=attr, direction=direction) - return render_template('beerpage.jinja2', beer_data=beerinfo, attrs=attrs) + similar_beers=similar_beer_objects, attr=attr, direction=direction) + return render_template('beerpage.jinja2', beer_data=beerinfo, attrs=attrs, + similar_beers=similar_beer_objects) -def beer_lookup(brewery_id, beer_id): - try: +def beer_lookup(brewery_id, beer_id=None): + if beer_id: item_id = brewery_id + "-" + beer_id - beer_result = beer[item_id] - brewer = brewery_names[brewery_id] - return BeerInfo(beer_id, brewery_id, beer_result, brewer) - except: - return None + try: + beer_result = beer[item_id] + return beer_result, brewery_names[brewery_id] + except: + return None + else: + try: + beer_result = beer[brewery_id] + return beer_result, brewery_names[brewery_id.split("-")[0]] + except: + return None def find_beers_from_brewery(brewery_id): @@ -68,17 +81,16 @@ def find_beers_from_brewery(brewery_id): class BeerInfo(object): - def __init__(self, beer_id, brewery_id, item_json, brewery_name): - self.id = beer_id - self.brewery_id = brewery_id + def __init__(self, beer_id, brewery_name, item_json): + self._id = beer_id self.parent_style = item_json[1][1] self.base_style = item_json[1][0] self.name = item_json[0] self.abv = item_json[2] self.brewer = brewery_name self.num_reviews = item_json[3] - self.drinks_like = get_drinks_like(brewery_id + '-' + beer_id) - + self.drinks_like = get_drinks_like(self._id) + self.link ="/brewery/" + beer_id.split('-')[0] + '/' + beer_id.split('-')[1] class Brewery(object): diff --git a/templates/beerpage.jinja2 b/templates/beerpage.jinja2 index f6e0b2e..f76c209 100644 --- a/templates/beerpage.jinja2 +++ b/templates/beerpage.jinja2 @@ -14,7 +14,7 @@ <tr> <td>{{ beer_data.parent_style if beer_data != None else 'ASS BEER' }}</td> <td>{{ beer_data.base_style if beer_data != None else 'TURBO ASS BEER' }}</td> - <td>{{ beer_data.abv if beer_data != None else 'BETWEEN 0 and 100' }} (drinks like: {{beer_data.drinks_like|round(2)}})</td> + <td>{{ beer_data.abv if beer_data != None else 'BETWEEN 0 and 100' }} (drinks like: {{beer_data.drinks_like}})</td> </tr> </table> </div> @@ -35,17 +35,11 @@ </select> <input type="submit" value="Go" class="btn btn-outline-primary"> </form> - {% if direction and attr %} - <h5>Beers like {{ beer_data.name }} but {{ direction }} {{ attr }}</h5> + <h5>Beers like {{ beer_data.name }}</h5> <ul> - {% for sb in similar_beers %} - <li> - <a href="{{ url_for('get_beer_details', brewery_id=sb.brewery_id, beer_id=sb.id) }}"> - {{ sb.name }} ({{ sb.base_style }} by {{ sb.brewer }}) - </a> - </li> + {% for similar_beer in similar_beers %} + <li><a href="{{ similar_beer.link }}" >{{ similar_beer.name }}</a></li> {% endfor %} </ul> - {% endif %} {% endblock %} @@ -88,12 +88,14 @@ for e in embeddings: def get_closest(beer_id): one_embed = final_data[beer_id]['embed'] - + beer_ids = [] for thing in sorted(small_embeddings, key = lambda x: cosine(one_embed, x[1]), reverse=False)[:25]: if thing[0] in beer_names: - print(beer_names[thing[0]]) + beer_ids.append(thing[0]) + print(thing[0]) print('=' * 50) + return beer_ids def get_closest_to_point(one_embed, style_limit=[]): # one_embed = final_data[beer_id]['embed'] |