server
This commit is contained in:
parent
e33c68cb05
commit
4d65120d56
7 changed files with 87 additions and 9 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,2 +1,3 @@
|
||||||
__pycache__/
|
__pycache__/
|
||||||
.idea
|
.idea
|
||||||
|
config.py
|
||||||
|
|
2
init.sql
2
init.sql
|
@ -15,7 +15,7 @@ create table menus
|
||||||
venue int not null,
|
venue int not null,
|
||||||
meal int not null,
|
meal int not null,
|
||||||
constraint eindeutig
|
constraint eindeutig
|
||||||
unique (venue, date),
|
unique (venue, date, meal),
|
||||||
constraint menus_meals_id_fk
|
constraint menus_meals_id_fk
|
||||||
foreign key (meal) references hunger.meals (id)
|
foreign key (meal) references hunger.meals (id)
|
||||||
)
|
)
|
||||||
|
|
11
main.py
11
main.py
|
@ -1,14 +1,13 @@
|
||||||
import json
|
|
||||||
|
|
||||||
import pymysql.cursors
|
import pymysql.cursors
|
||||||
|
|
||||||
|
import config
|
||||||
import parser
|
import parser
|
||||||
|
|
||||||
# Connect to the database
|
# Connect to the database
|
||||||
connection = pymysql.connect(host='localhost',
|
connection = pymysql.connect(host=config.host,
|
||||||
user='root',
|
user=config.user,
|
||||||
password='Findus',
|
password=config.password,
|
||||||
db='hunger',
|
db=config.db,
|
||||||
charset='utf8mb4',
|
charset='utf8mb4',
|
||||||
cursorclass=pymysql.cursors.DictCursor)
|
cursorclass=pymysql.cursors.DictCursor)
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@ def get_menus():
|
||||||
descr += " " + extradescr
|
descr += " " + extradescr
|
||||||
date = datetime.strptime(datestring, "%d.%m.").replace(year=datetime.today().year)
|
date = datetime.strptime(datestring, "%d.%m.").replace(year=datetime.today().year)
|
||||||
tagesflade = {
|
tagesflade = {
|
||||||
"date": date.strftime("%Y-%m-%d"),
|
"date": date.isoformat(),
|
||||||
"name": descr
|
"name": descr
|
||||||
}
|
}
|
||||||
tagesfladen.append(tagesflade)
|
tagesfladen.append(tagesflade)
|
||||||
|
|
|
@ -38,7 +38,7 @@ def get_menus():
|
||||||
if not any(str.isdigit(c) for c in strong.text):
|
if not any(str.isdigit(c) for c in strong.text):
|
||||||
title.append(strong.text.strip())
|
title.append(strong.text.strip())
|
||||||
tagesflade = {
|
tagesflade = {
|
||||||
"date": date.strftime("%Y-%m-%d"),
|
"date": date.isoformat(),
|
||||||
"name": " ".join(title).replace("\n", " ")
|
"name": " ".join(title).replace("\n", " ")
|
||||||
}
|
}
|
||||||
day_p = p # findNext should find the second mea
|
day_p = p # findNext should find the second mea
|
||||||
|
|
|
@ -1,6 +1,13 @@
|
||||||
beautifulsoup4==4.6.0
|
beautifulsoup4==4.6.0
|
||||||
certifi==2017.4.17
|
certifi==2017.4.17
|
||||||
chardet==3.0.3
|
chardet==3.0.3
|
||||||
|
click==6.7
|
||||||
|
Flask==0.12.2
|
||||||
idna==2.5
|
idna==2.5
|
||||||
|
itsdangerous==0.24
|
||||||
|
Jinja2==2.9.6
|
||||||
|
MarkupSafe==1.0
|
||||||
|
PyMySQL==0.7.11
|
||||||
requests==2.17.3
|
requests==2.17.3
|
||||||
urllib3==1.21.1
|
urllib3==1.21.1
|
||||||
|
Werkzeug==0.12.2
|
||||||
|
|
71
server.py
Normal file
71
server.py
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
from datetime import date
|
||||||
|
from pprint import pprint
|
||||||
|
|
||||||
|
import pymysql
|
||||||
|
from flask import Flask, jsonify, url_for, redirect, request, abort
|
||||||
|
from flask.json import JSONEncoder
|
||||||
|
|
||||||
|
app = Flask(__name__)
|
||||||
|
import config
|
||||||
|
|
||||||
|
# Connect to the database
|
||||||
|
connection = pymysql.connect(host=config.host,
|
||||||
|
user=config.user,
|
||||||
|
password=config.password,
|
||||||
|
db=config.db,
|
||||||
|
charset='utf8mb4',
|
||||||
|
cursorclass=pymysql.cursors.DictCursor)
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/venue/')
|
||||||
|
def get_venues():
|
||||||
|
with connection.cursor() as cursor:
|
||||||
|
sql = "SELECT * FROM venues"
|
||||||
|
cursor.execute(sql)
|
||||||
|
venues = cursor.fetchall()
|
||||||
|
for venue in venues:
|
||||||
|
# venue["meals_url"] = url_for("get_meals", venueid=venue["id"])
|
||||||
|
venue["meals_url"] = url_for("get_meals", venueid=venue["id"], _external=True)
|
||||||
|
return jsonify(venues)
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/venue/<int:venueid>/')
|
||||||
|
def get_meals(venueid):
|
||||||
|
with connection.cursor() as cursor:
|
||||||
|
select = request.args.get("select")
|
||||||
|
if not select or select == "week":
|
||||||
|
sql_range = " AND YEARWEEK(date, 1) = YEARWEEK(CURDATE(), 1)"
|
||||||
|
elif select == "today":
|
||||||
|
sql_range = " AND date=CURDATE()"
|
||||||
|
else:
|
||||||
|
return abort(400)
|
||||||
|
sql = """SELECT venue, date, name, description
|
||||||
|
FROM menus
|
||||||
|
JOIN meals ON meals.id = menus.meal
|
||||||
|
WHERE venue = %s"""
|
||||||
|
cursor.execute(sql + sql_range, venueid)
|
||||||
|
menues = cursor.fetchall()
|
||||||
|
return jsonify(menues)
|
||||||
|
|
||||||
|
|
||||||
|
@app.route("/")
|
||||||
|
def redirect_to_correct_api():
|
||||||
|
return redirect(url_for("get_venues"))
|
||||||
|
|
||||||
|
|
||||||
|
class CustomJSONEncoder(JSONEncoder):
|
||||||
|
def default(self, obj):
|
||||||
|
try:
|
||||||
|
if isinstance(obj, date):
|
||||||
|
return obj.isoformat()
|
||||||
|
iterable = iter(obj)
|
||||||
|
except TypeError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
return list(iterable)
|
||||||
|
return JSONEncoder
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app.json_encoder = CustomJSONEncoder
|
||||||
|
app.run(host="0.0.0.0", debug=True)
|
Reference in a new issue