]> rtime.felk.cvut.cz Git - coffee/coffee-flask.git/blob - app.py
f5a247e08f8e9997399fe9472a41a6f0ab60f33e
[coffee/coffee-flask.git] / app.py
1 from flask import Flask, render_template, send_file, request, session, redirect, url_for, make_response
2 from flask_cors import CORS
3
4 import numpy as np
5 import matplotlib
6 matplotlib.use('Agg')
7 import matplotlib.pyplot as plt
8 from io import BytesIO
9
10 import coffee_db as db
11 import time
12
13 db.init_db()
14 app = Flask(__name__)
15 CORS(app, supports_credentials=True)
16 app.secret_key = b'_5#y2L"F4Q8z\n\xec]/'
17
18 @app.route('/')
19 def hello():
20     if "uid" in session:
21         uid = session["uid"];
22         return render_template('hello.html', name=db.get_name(uid))
23     return render_template('hello.html')
24
25 @app.route('/login', methods=["POST"])
26 @app.route('/login/<uid>')
27 def login(uid=None):
28     if request.method == "POST":
29         uid = request.data.decode("utf-8")
30     if uid is not None:
31         db.add_user(uid)
32         session["uid"] = uid;
33     return redirect(url_for('user'))
34
35 @app.route('/logout')
36 def logout():
37     session.pop('uid', None)
38     return redirect(url_for('user'))
39
40 @app.route('/user')
41 def user():
42     if "uid" in session:
43         uid = session["uid"];
44         return render_template('user.html',
45                 name=db.get_name(uid),
46                 flavors=db.flavors(),
47                 count=db.coffee_count(uid, 0),
48                 stamp=time.time()
49                 )
50     return render_template('user.html')
51
52 @app.route('/user/rename')
53 def user_rename():
54     name = request.args.get("name")
55     if name and "uid" in session:
56         uid = session["uid"];
57         db.name_user(uid, name)
58     return redirect(url_for('user'))
59
60 @app.route("/coffee/graph_flavors")
61 def coffee_graph_flavors():
62     b = BytesIO()
63     if "uid" in session:
64         uid = session["uid"]
65         flavors, counts = zip(*db.coffee_flavors(uid))
66     else:
67         flavors, counts = zip(*db.coffee_flavors())
68     fig = plt.figure()
69     ax = fig.add_subplot(111)
70     ax.set_aspect(1)
71     ax.pie(counts)
72     ax.legend(flavors)
73     ax.set_title("Your taste")
74     fig.savefig(b, format="svg", bbox_inches="tight")
75     b.seek(0)
76     return send_file(b, mimetype="image/svg+xml")
77
78 @app.route("/coffee/graph_history")
79 def coffee_graph_history():
80     b = BytesIO()
81     if "uid" in session:
82         uid = session["uid"]
83         hist = db.coffee_history(uid)
84     else:
85         hist = db.coffee_history()
86     if hist == []:
87         days = tuple()
88         counts = tuple()
89     else:
90         days, counts = zip(*hist)
91     fig = plt.figure()
92     ax = fig.add_subplot(111)
93     ax.bar(range(len(days)), counts)
94     ax.set_title("Your week")
95     fig.savefig(b, format="svg", bbox_inches="tight")
96     b.seek(0)
97     return send_file(b, mimetype="image/svg+xml")
98
99 @app.route("/coffee/add", methods=["POST"])
100 def coffee_add():
101     if request.method == "POST":
102         json = request.json
103         if json and "uid" in session:
104             db.add_coffee(session["uid"], json["flavor"], json["time"])
105     return redirect(url_for('user'))
106
107 @app.route("/coffee/count")
108 def coffee_count():
109     start = request.args.get("start")
110     stop = request.args.get("stop")
111     return str(db.coffee_count(session.get("uid"), start, stop))
112
113 @app.route('/js')
114 def js():
115     response = make_response(render_template('main.js'))
116     response.headers['Content-Type'] = "text/javascript"
117     return response
118
119 @app.route("/log", methods=["POST"])
120 def log():
121     if request.method == "POST":
122         data = request.data.decode("utf-8")
123         print(data)
124         return data
125     return "nope"