optimize mensa async

This commit is contained in:
2024-04-09 11:04:18 +02:00
parent 0d31d84d48
commit ccb088e36d
7 changed files with 66 additions and 48 deletions

View File

@ -1,5 +1,5 @@
import json
from init import db, Meals#, scheduler
from init import db, Meals, scheduler
import datetime
import time
import httpx
@ -7,7 +7,7 @@ import httpx
nomeal = 'Essen nicht (mehr) verfügbar'
def getMeals(day: datetime):
async def getMeals(day: datetime):
"""
Liefert alle Mahlzeiten eines Tages. \n
Befinden sie sich schon in der Datenbank, werden diese zurückgegeben. \n
@ -23,7 +23,7 @@ def getMeals(day: datetime):
essen += [i.name]
essen.sort(key=len, reverse=True)
return essen
return getMealsFromAPI(day, dbentry=True)
return await getMealsFromAPI(day, dbentry=True)
async def getMealsFromAPI(day: str, dbentry: bool = False):
@ -110,29 +110,29 @@ def formatDay(day: datetime):
return day
#@scheduler.task('cron', id="refreshMeals", hour='8-11', day_of_week='*', minute='15', week='*', second='30')
def refreshMeals():
@scheduler.task('cron', id="refreshMeals", hour='8-11', day_of_week='*', minute='*/15', week='*', second='30')
async def refreshMeals():
"""
Aktualisiert immer vormittags alle Mahlzeiten in der Datenbank. \n
Datenbankeinträge werden ersetzt, wenn die API andere Mahlzeiten liefert.
"""
print("Aktualisiere Essenspläne...\n")
#with scheduler.app.app_context():
# table = Meals.query.all()
# dates = []
# for i in table:
# if i.date not in dates:
# dates += [i.date]
# for i in range(len(dates)):
# dates[i] = formatDay(dates[i])
# for i in dates:
# apinames = getMealsFromAPI(i)
# dbmeals = Meals.query.filter_by(date=i).all()
# dbnames = []
# for m in dbmeals:
# dbnames += [m.name]
# if set(dbnames) != set(apinames) and nomeal not in apinames:
# for n in dbnames:
# db.session.delete(Meals.query.filter_by(date=i, name=n).first())
# db.session.commit()
# getMealsFromAPI(i, True)
table = Meals.query.all()
dates = []
for i in table:
if i.date not in dates:
dates += [i.date]
for i in range(len(dates)):
dates[i] = formatDay(dates[i])
for i in dates:
apinames = await getMealsFromAPI(i)
dbmeals = Meals.query.filter_by(date=i).all()
dbnames = []
for m in dbmeals:
dbnames += [m.name]
if set(dbnames) != set(apinames) and nomeal not in apinames:
for n in dbnames:
db.session.delete(Meals.query.filter_by(date=i, name=n).first())
db.session.commit()
await getMealsFromAPI(i, True)