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__/
|
||||
.idea
|
||||
config.py
|
||||
|
|
2
init.sql
2
init.sql
|
@ -15,7 +15,7 @@ create table menus
|
|||
venue int not null,
|
||||
meal int not null,
|
||||
constraint eindeutig
|
||||
unique (venue, date),
|
||||
unique (venue, date, meal),
|
||||
constraint menus_meals_id_fk
|
||||
foreign key (meal) references hunger.meals (id)
|
||||
)
|
||||
|
|
11
main.py
11
main.py
|
@ -1,14 +1,13 @@
|
|||
import json
|
||||
|
||||
import pymysql.cursors
|
||||
|
||||
import config
|
||||
import parser
|
||||
|
||||
# Connect to the database
|
||||
connection = pymysql.connect(host='localhost',
|
||||
user='root',
|
||||
password='Findus',
|
||||
db='hunger',
|
||||
connection = pymysql.connect(host=config.host,
|
||||
user=config.user,
|
||||
password=config.password,
|
||||
db=config.db,
|
||||
charset='utf8mb4',
|
||||
cursorclass=pymysql.cursors.DictCursor)
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@ def get_menus():
|
|||
descr += " " + extradescr
|
||||
date = datetime.strptime(datestring, "%d.%m.").replace(year=datetime.today().year)
|
||||
tagesflade = {
|
||||
"date": date.strftime("%Y-%m-%d"),
|
||||
"date": date.isoformat(),
|
||||
"name": descr
|
||||
}
|
||||
tagesfladen.append(tagesflade)
|
||||
|
|
|
@ -38,7 +38,7 @@ def get_menus():
|
|||
if not any(str.isdigit(c) for c in strong.text):
|
||||
title.append(strong.text.strip())
|
||||
tagesflade = {
|
||||
"date": date.strftime("%Y-%m-%d"),
|
||||
"date": date.isoformat(),
|
||||
"name": " ".join(title).replace("\n", " ")
|
||||
}
|
||||
day_p = p # findNext should find the second mea
|
||||
|
|
|
@ -1,6 +1,13 @@
|
|||
beautifulsoup4==4.6.0
|
||||
certifi==2017.4.17
|
||||
chardet==3.0.3
|
||||
click==6.7
|
||||
Flask==0.12.2
|
||||
idna==2.5
|
||||
itsdangerous==0.24
|
||||
Jinja2==2.9.6
|
||||
MarkupSafe==1.0
|
||||
PyMySQL==0.7.11
|
||||
requests==2.17.3
|
||||
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