import time import icalendar import datetime import requests import recurring_ical_events import json from init import app, db, Meals 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): print (day) if day.day < 10: tag = "0" + str(day.day) else: tag = str(day.day) day = str(day.year) + "-" + str(day.month) + "-" + tag essen = [] query = Meals.query.filter_by(date=day).all() if len(query) != 0: for i in query: essen += [i.name] return essen 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")) try: num = len(jres["data"][0]["lines"]) for i in range(num): try: jsmeal = jres["data"][0]["lines"][i]["meals"][0] except IndexError: return ["Essen nicht (mehr) verfügbar"] name = jsmeal["name"] vegan = jsmeal["classifiers"].count("VG") == 1 schwein = jsmeal["classifiers"].count("S") == 1 if vegan: veget = True else: veget = jsmeal["classifiers"].count("VEG") == 1 if veget: if name.count("Reibekäse") > 0: vegan = True if name != "Tagesdessert": essen += [name] mid = int(time.time()*1000) % 100000 neu = Meals(date=day, name=name, id=mid, vegan=vegan, vegetarian=veget, schwein=schwein) db.session.add(neu) db.session.commit() except KeyError: essen = ["Essen nicht (mehr) verfügbar"] return essen