From 8af85d1abd96a9741b381941b1c5637cdd6357cc Mon Sep 17 00:00:00 2001 From: paulmart-n Date: Thu, 30 Nov 2023 23:44:52 +0100 Subject: [PATCH] QUICK FIX DEPLOYMENT --- fetchRAPLA.py | 2 +- init-sql.sh | 4 ++- parseICAL.py | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 90 insertions(+), 2 deletions(-) create mode 100644 parseICAL.py diff --git a/fetchRAPLA.py b/fetchRAPLA.py index b1310a8..42593f6 100644 --- a/fetchRAPLA.py +++ b/fetchRAPLA.py @@ -52,7 +52,7 @@ def getIcal(kurs: str): file = open("calendars/list.json", "r") jf = json.load(file) try: - return jf[kurs] + return jf[kurs][0] except KeyError: return None diff --git a/init-sql.sh b/init-sql.sh index 7074f61..4777c4c 100755 --- a/init-sql.sh +++ b/init-sql.sh @@ -1,3 +1,5 @@ #!/bin/sh -mysql -e "USE paulmrtn_DUALHUB; CREATE TABLE user ( id int NOT NULL, email VARCHAR(255), password VARCHAR(255), name VARCHAR(255), PRIMARY KEY (ID), UNIQUE (ID, EMAIL) );" +mysql -e "USE paulmrtn_DUALHUB; CREATE TABLE user ( id int NOT NULL, email VARCHAR(255), password VARCHAR(255), name VARCHAR(255), kurs VARCHAR (15), PRIMARY KEY (ID), UNIQUE (ID, EMAIL) );" +mysql -e "USE paulmrtn_DUALHUB; CREATE TABLE dualis ( uid int NOT NULL, token VARCHAR(255), result_lists VARCHAR(255), token_created INT, PRIMARY KEY (uid));" +mysql -e "USE paulmrtn_DUALHUB; CREATE TABLE meals ( id int NOT NULL, date date, name VARCHAR(100), vegetarian tinyint(1), vegan tinyint(1), schwein tinyint(1), PRIMARY KEY (id));" diff --git a/parseICAL.py b/parseICAL.py new file mode 100644 index 0000000..fc1e48b --- /dev/null +++ b/parseICAL.py @@ -0,0 +1,86 @@ +import icalendar +import datetime +import requests +import recurring_ical_events +import json + + +def getWeek(weekstart: datetime, file: str, showsat: bool): + if weekstart == "today": + start_date = datetime.date.today() + else: + start_date = weekstart + start_date -= datetime.timedelta(days=start_date.weekday() % 7) + end_date = start_date + datetime.timedelta(days=7) + with open("calendars/" + file) as f: + calendar = icalendar.Calendar.from_ical(f.read()) + events = recurring_ical_events.of(calendar).between(start_date, end_date) + eventl = [] + for event in events: + estart = event["DTSTART"].dt + formstart = str(estart.hour) + ":" + str(estart.minute) + eend = event["DTEND"].dt + formend = str(eend.hour) + ":" + str(eend.minute) + forml = [formstart, formend] + for i in range(2): + if len(forml[i]) != 5: + if forml[i][-2] == ":": + forml[i] = forml[i] + "0" + if forml[i][1] == ":": + forml[i] = "0" + forml[i] + formstart = forml[0] + formend = forml[1] + eventdict = { + "start": formstart, + "end": formend, + "dur": str(event["DTEND"].dt - event["DTSTART"].dt)[:-3], + "name": event["SUMMARY"], + "room": event["LOCATION"], + "weekday": estart.weekday(), + "day": estart.day + } + eventl += [eventdict] + return eventl, daylist(start_date, showsat) + + +shortnames = ["mon", "tue", "wed", "thu", "fri", "sat"] +longnames = ["Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"] + + +def daylist(weekstart: datetime, showsat: bool): + weekday = weekstart + dayl = [] + if showsat: + r = 6 + else: + r = 5 + for i in range(r): + essen = getMeals(weekday) + dayl += [{ + "day": weekday.day, + "short": shortnames[i], + "long": longnames[i], + "mensa": essen + }] + weekday += datetime.timedelta(days=1) + return dayl + + +def getMeals(day: datetime): + if day.day < 10: + tag = "0" + str(day.day) + else: + tag = str(day.day) + day = str(day.year) + "-" + str(day.month) + "-" + tag + url = "https://dh-api.paulmartin.cloud/plans/" + day + "?canteens=erzberger" + response = requests.request("GET", url) + response = response.content + jres = json.loads(response.decode("utf-8")) + essen = [] + try: + num = len(jres["data"][0]["lines"]) + for i in range(num): + essen += [jres["data"][0]["lines"][i]["meals"][0]["name"]] + except KeyError: + essen = ["Tag nicht (mehr) verfügbar"] + return essen