From 1e0668ad77e993f61d9d94486126a4ad0dd24ed4 Mon Sep 17 00:00:00 2001 From: Davide Bongiovanni Date: Sun, 2 Dec 2018 14:46:00 +0100 Subject: [PATCH] Added view meal endpoint --- kukv1.py | 93 ++++++++++++++++++++++++++++------------ templates/meal_list.html | 4 +- 2 files changed, 68 insertions(+), 29 deletions(-) diff --git a/kukv1.py b/kukv1.py index dd9af8d..0b31ad4 100644 --- a/kukv1.py +++ b/kukv1.py @@ -82,6 +82,36 @@ def getUpcomingMeals(): r.close() return meals +def getMeal(meal_id): + query = 'select foo.id, username as kuk, meal_date, array_agg as eaters, selection_deadline from (select meals.id, kuk, meal_date, selection_deadline, array_agg(username) from meals join users on users.id = any(meals.eaters) where meals.id=:meal_id group by meals.id order by meal_date) as foo join users on kuk=users.id;' + r = db_engine.execute(text(query), meal_id=meal_id) + meals = [] + for row in r: + meals.append(dict(row)) + r.close() + if len(meals) == 0: + return None + meal = meals[0] + seconds_to_deadline = (meal['selection_deadline'] - datetime.datetime.now()).total_seconds() + if seconds_to_deadline < 0: + meal['friendly_selection_deadline'] = '' + elif seconds_to_deadline > 3600: + hours_td = round(seconds_to_deadline / 3600) + days_td = int(hours_td / 24) + hours_td = hours_td % 24 + meal['friendly_selection_deadline'] = str(days_td) + ' days ' + str(hours_td) + ' hours' + else: + meal['friendly_selection_deadline'] = str(round(seconds_to_deadline / 60)) + ' minutes' + meal['meal_time'] = meal['meal_date'].strftime('%H:%M') + meal['meal_friendly_date'] = meal['meal_date'].strftime('%A %d %B') + meal['candidate'] = 'davide' + if (meal['meal_date'] - datetime.datetime.now()).total_seconds() < 0: + meal['needs_confirmation'] = True + else: + meal['needs_confirmation'] = False + + return meal + # adding to meal @app.route("/addme") @login_required @@ -102,31 +132,40 @@ def addme(): def index(): return render_template('meal_list.html', leaderboard=getLeaderboard(), meals=getUpcomingMeals(), now=datetime.datetime.now()) +@app.route('/view_meal') +def view_meal(): + meal_id = request.args.get('meal') + meal = getMeal(meal_id) + if meal == None: + return abort(400) + print(meal) + return render_template('index.html', leaderboard=getLeaderboard(), meal=meal) + @app.route('/login', methods=['GET', 'POST']) def login(): - if request.method == 'POST': - username = request.form['username'] - password = request.form['password'] - r = db_engine.execute(text('select id from users where username=:username and password=:password'), username=username, password=password) - result = [] - for row in r: - result.append(dict(row)) - r.close() - print(len(users)) - if len(result) > 0: - u = User.get(username) - u.user_id = result[0]['id'] - login_user(u) - return redirect(request.args.get('next') or url_for('index')) - return abort(401) - else: - return Response(''' -
-

-

-

-

- ''') + if request.method == 'POST': + username = request.form['username'] + password = request.form['password'] + r = db_engine.execute(text('select id from users where username=:username and password=:password'), username=username, password=password) + result = [] + for row in r: + result.append(dict(row)) + r.close() + print(len(users)) + if len(result) > 0: + u = User.get(username) + u.user_id = result[0]['id'] + login_user(u) + return redirect(request.args.get('next') or url_for('index')) + return abort(401) + else: + return Response(''' +
+

+

+

+

+ ''') with open('admin.json') as f: postgres_credentials = json.load(f) @@ -141,18 +180,18 @@ login_manager.login_view = "login" @app.route("/logout") @login_required def logout(): - logout_user() - return Response('

Logged out

') + logout_user() + return Response('

Logged out

') # handle login failed @app.errorhandler(401) def page_not_found(e): - return Response('

Login failed

') + return Response('

Login failed

') # callback to reload the user object @login_manager.user_loader def load_user(userid): - return User.get(userid) + return User.get(userid) if __name__ == '__main__': app.run('0.0.0.0') \ No newline at end of file diff --git a/templates/meal_list.html b/templates/meal_list.html index e05629c..46517b2 100644 --- a/templates/meal_list.html +++ b/templates/meal_list.html @@ -39,9 +39,9 @@

{{meal.meal_friendly_date}}

{% endif %} {% if meal.needs_confirmation %} -
+
{% else %} -
+
{% endif %} {{meal.meal_time}}

{% if meal.needs_confirmation %}Did  {% endif %}{% if meal.kuk != "" %}   {% if not meal.needs_confirmation %}WILL{% endif %}{% else %}   {% if not meal.needs_confirmation %}SHOULD{% endif %}{% endif%} cook for
{% for e in meal.eaters %}  {% endfor %}{% if meal.needs_confirmation %}?{% endif %}