From dd052aeded1ae4684229461f803215301f7747d7 Mon Sep 17 00:00:00 2001 From: paulmart-n Date: Wed, 17 Apr 2024 13:56:16 +0200 Subject: [PATCH] Rapla-Key-Import + Depreciate calendars/list.json --- .gitignore | 3 +- calendar_generation.py | 9 ++- calendars/list.json | 2 - fetchRAPLA.py | 125 +++++++++++++++++++++++++----------- init.py | 11 +++- requirements.txt | 22 ++++--- routing.py | 2 +- static/cal.css | 3 +- static/cal.css.map | 2 +- static/cal.scss | 3 +- templates/plan-general.html | 7 +- templates/testpages.html | 16 ----- tests_examples/testpages.py | 97 ---------------------------- 13 files changed, 126 insertions(+), 176 deletions(-) delete mode 100644 calendars/list.json delete mode 100644 templates/testpages.html delete mode 100644 tests_examples/testpages.py diff --git a/.gitignore b/.gitignore index 4579e6f..fdaf744 100644 --- a/.gitignore +++ b/.gitignore @@ -3,5 +3,4 @@ ENV/ set/ VIRTUAL_ENV/ calendars/ -.idea/ -calendars/list.json +.idea/ \ No newline at end of file diff --git a/calendar_generation.py b/calendar_generation.py index 38c6cad..c2efdf2 100644 --- a/calendar_generation.py +++ b/calendar_generation.py @@ -40,8 +40,10 @@ async def getWeek(weekstart: datetime, file: str, showsat: bool): mon += " " + str(end_date.year) 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 if str(estart.tzinfo) != "Europe/Berlin": @@ -60,6 +62,10 @@ async def getWeek(weekstart: datetime, file: str, showsat: bool): forml[i] = "0" + forml[i] formstart = forml[0] formend = forml[1] + try: + teacher = event["ATTENDEE"].params["CN"] + except KeyError: + teacher = "" eventdict = { "start": formstart, "end": formend, @@ -67,7 +73,8 @@ async def getWeek(weekstart: datetime, file: str, showsat: bool): "name": event["SUMMARY"], "room": event["LOCATION"], "weekday": estart.weekday(), - "day": estart.day + "day": estart.day, + "teacher": teacher, } eventl += [eventdict] return eventl, await daylist(start_date, showsat), prevw, nextw, mon diff --git a/calendars/list.json b/calendars/list.json deleted file mode 100644 index 7a73a41..0000000 --- a/calendars/list.json +++ /dev/null @@ -1,2 +0,0 @@ -{ -} \ No newline at end of file diff --git a/fetchRAPLA.py b/fetchRAPLA.py index 7c6a428..736de81 100644 --- a/fetchRAPLA.py +++ b/fetchRAPLA.py @@ -1,14 +1,15 @@ import urllib.error -from urllib.request import urlretrieve + +from dateutil.parser import * import asyncio import httpx import icalendar +from icalendar import Calendar, Event import json -import recurring_ical_events -from init import scheduler, app +from init import scheduler, app, Rapla, db async def fetchPlan(session, url): @@ -21,6 +22,12 @@ def writeToFile(filename, data): f.close() +def writeToDB(kurs, url): + new_kurs = Rapla(name=kurs, link=url, file=f"rapla{kurs}.ical") + db.session.add(new_kurs) + db.session.commit() + + def parseURL(url: str): """ Konvertiert URLs ins korrekte Format. \n @@ -36,17 +43,19 @@ def parseURL(url: str): url = url[rapla:] http = url.find(":") if url[:http] == "http": - url = "https" + url[http:] + url = f"https{url[http:]}" elif http == -1: - url = "https://" + url + url = f"https://{url}" p = url.find("page=") u = url.find("&") if (url[p + 5:u]).lower() == "ical": - return url + return 1, url elif p != -1: - return url[:p + 5] + "ical" + url[u:] + return 1, f"{url[:p + 5]}ical{url[u:]}" + elif url.find("key") != -1: + return 2, url else: - return 0 + return 0, 0 async def getNewRapla(url: str): @@ -57,26 +66,26 @@ async def getNewRapla(url: str): :param url: :return str: """ - url = parseURL(url) - if url == 0: + parsed = parseURL(url) + if parsed[0] == 0: return 0 + elif parsed[0] == 1: + url = parsed[1] + elif parsed[0] == 2: + return await buildFromKey(parsed[1]) urlfile = url.find("file=") kurs = url[urlfile + 5:].upper() - - try: - urlretrieve(url, "calendars/rapla" + kurs + ".ical") - async with httpx.AsyncClient() as s: - response = await fetchPlan(s, url) - writeToFile(f"calendars/rapla{kurs}.ical", response) - except urllib.error.URLError: - return -1 - file = open("calendars/list.json", "r+") - jsoncal = json.load(file) - jsoncal.update({kurs: [f"rapla{kurs}.ical", url]}) - file.close() - file = open("calendars/list.json", "w") - json.dump(jsoncal, file, indent=4) - return f"rapla{kurs}.ical" + if url[-5:] != ".ical": + try: + async with httpx.AsyncClient() as s: + response = await fetchPlan(s, url) + writeToFile(f"calendars/rapla{kurs}.ical", response) + except urllib.error.URLError: + return -1 + writeToDB(kurs, url) + return f"rapla{kurs}.ical" + else: + return url def getIcal(kurs: str): @@ -85,10 +94,9 @@ def getIcal(kurs: str): :param kurs: :return str: """ - file = open("calendars/list.json", "r") - jf = json.load(file) + rapla = Rapla.query.filter(Rapla.name == kurs).first() try: - return jf[kurs][0] + return rapla.file except KeyError: return None @@ -98,16 +106,11 @@ def getRaplas(): Liefert alle auf dem Server gespeicherten Raplas. :return (Kursliste, Dateiliste, URL-Liste): """ - file = open("calendars/list.json", "r") - jsonf = json.load(file) - kursl = [] - filel = [] - urll = [] - for i in jsonf: - kursl += [i] - filel += [jsonf[i][0]] - urll += [jsonf[i][1]] - return sorted(kursl), sorted(filel), sorted(urll) + raplas = Rapla.query.all() + kursl = [rapla.name for rapla in raplas] + filel = [rapla.file for rapla in raplas] + urll = [rapla.link for rapla in raplas] + return kursl, filel, urll async def refreshRapla(): @@ -126,7 +129,51 @@ async def refreshRapla(): writeToFile(f"calendars/{filel[cal]}", callist[cal]) -@scheduler.task('cron', id="raplaschedule", hour='*', day_of_week='*', minute='*/15', week='*') +#@scheduler.task('cron', id="raplaschedule", hour='*', day_of_week='*', minute='*/2', week='*') def raplaschedule(): with app.app_context(): asyncio.run(refreshRapla()) + + +async def buildFromKey(url): + async with httpx.AsyncClient() as s: + page = await s.get(url=url) + if page.text[:10] == "BEGIN:VCAL": + info = page.headers['content-disposition'] + kursname = info[info.find('filename=')+9:-4].upper() + writeToDB(kursname, url) + return url + else: + kursname = page.text[page.text.find("") + 7:page.text.find("")] + if len(kursname) > 15: + return 0 + start = "2024-08-01" + end = "2024-12-31" + payload = {"url": url, "start": start, "end": end} + req = await s.post(url="https://dh-api.paulmartin.cloud/rapla", data=payload, + headers={'Content-Type': 'application/x-www-form-urlencoded'}, timeout=10) + jsonresp = json.loads(req.text) + cal = Calendar() + cal.add('prodid', '-//Rapla//iCal Plugin//EN') + cal.add('version', '2.0') + for i in jsonresp: + if len(jsonresp[i]) != 0: + for jsonday in jsonresp[i]: + event = Event() + event.add('SUMMARY', jsonday['title']) + event.add('LOCATION', jsonday['ressources']) + event.add('DTSTART', parse(jsonday['startDate'], dayfirst=True)) + event.add('DTEND', parse(jsonday['endDate'], dayfirst=True)) + try: + teacher = icalendar.vCalAddress(value=jsonday['persons']) + teacher.params["CN"] = jsonday['persons'] + except KeyError: + teacher = icalendar.vCalAddress(value="") + teacher.params["CN"] = "" + event.add('ATTENDEE', teacher) + cal.add_component(event) + with open(f"calendars/rapla{kursname}.ical", "wb") as f: + f.write(cal.to_ical()) + f.close() + writeToDB(kursname, url) + return f"rapla{kursname}.ical" diff --git a/init.py b/init.py index c9e09e8..a2b1d4d 100644 --- a/init.py +++ b/init.py @@ -1,4 +1,3 @@ -import apscheduler from flask import Flask from flask_login import LoginManager, UserMixin from flask_sqlalchemy import SQLAlchemy @@ -8,7 +7,6 @@ from get_mysql import get_mysql import atexit from flask_apscheduler import APScheduler - def create(): """ Erstellt die Flask-App inkl. Datenbank und Login-Manager. @@ -69,6 +67,15 @@ class Semesterlist(db.Model): itemid = db.Column(db.Integer, primary_key=True) +class Rapla(db.Model): + """ + Datenbank-Modell für Rapla. + """ + name = db.Column(db.String(15), primary_key=True) + file = db.Column(db.String(20), unique=True) + link = db.Column(db.String(255), unique=True) + + class Meals(db.Model): """ Datenbank-Modell für Meals. diff --git a/requirements.txt b/requirements.txt index 5b7d78c..264a7f5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,20 +1,22 @@ -beautifulsoup4 -Flask +beautifulsoup4~=4.12.2 +Flask~=3.0.3 Flask_APScheduler Flask_Login flask_sqlalchemy -icalendar +icalendar~=5.0.11 recurring_ical_events talisman -Werkzeug +Werkzeug~=3.0.0 lxml -bs4 -pytz +bs4~=0.0.1 +pytz~=2023.3.post1 flask_talisman -asyncio -httpx -celery +asyncio~=3.4.3 +httpx~=1.0.0b0 +celery~=5.4.0rc2 flask[async] pymysql APScheduler -cryptography \ No newline at end of file +cryptography +python-dateutil~=2.9.0.post0 +requests~=2.31.0 \ No newline at end of file diff --git a/routing.py b/routing.py index a67aca2..6cc4da4 100644 --- a/routing.py +++ b/routing.py @@ -238,7 +238,7 @@ async def getRapla(): elif url != "None": file = await getNewRapla(url) if type(file) is not int: - User.query.filter_by(id=current_user.id).first().kurs = file[5:-5] + loadUser(current_user.id).kurs = file[5:-5] db.session.commit() else: return redirect(url_for("error", ecode=900)) diff --git a/static/cal.css b/static/cal.css index 507e70f..0fc8525 100644 --- a/static/cal.css +++ b/static/cal.css @@ -126,7 +126,8 @@ option { } .room, -.time { +.time, +.teacher { display: block; margin-top: 0px; margin-bottom: 0px; diff --git a/static/cal.css.map b/static/cal.css.map index 1976298..b247b58 100644 --- a/static/cal.css.map +++ b/static/cal.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["cal.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;;;AAMF;EACE;EACA;EACA;EACA;;;AAGF;AAAA;EAEE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;AAAA;EAEE;;;AAKF;EACE;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAKF;EACI;EACA;;;AAIJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;;;AAIJ;EACI;EACA;EACA;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACE;;;AAQF;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAKA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAKA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAKA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA","file":"cal.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["cal.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;;;AAMF;EACE;EACA;EACA;EACA;;;AAGF;AAAA;AAAA;EAGE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;AAAA;EAEE;;;AAKF;EACE;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAKF;EACI;EACA;;;AAIJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;;;AAIJ;EACI;EACA;EACA;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACE;;;AAQF;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAKA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAKA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAKA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA","file":"cal.css"} \ No newline at end of file diff --git a/static/cal.scss b/static/cal.scss index 88644ca..c6bd428 100644 --- a/static/cal.scss +++ b/static/cal.scss @@ -128,7 +128,8 @@ option { } .room, -.time { +.time, +.teacher { display: block; margin-top: 0px; margin-bottom: 0px; diff --git a/templates/plan-general.html b/templates/plan-general.html index c93b7ea..ecf996c 100644 --- a/templates/plan-general.html +++ b/templates/plan-general.html @@ -64,9 +64,10 @@ {% if i["weekday"] == e %}
{% block event %} {% endblock %} -

{{ i["name"] }}

-

{{ i["room"] }}

-

{{ i["start"] }} - {{ i["end"] }} ({{ i["dur"] }}h)

+

{{ i["name"] }}

+

{{ i["room"] }}

+

{{ i["teacher"] }}

+

{{ i["start"] }} - {{ i["end"] }} ({{ i["dur"] }}h)

{% endif %} {% endfor %} diff --git a/templates/testpages.html b/templates/testpages.html deleted file mode 100644 index f7bc70b..0000000 --- a/templates/testpages.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - Test Pages - - - kurs
- login
- noten
- plan-anon
- plan-user
- rapla
- semester
- - \ No newline at end of file diff --git a/tests_examples/testpages.py b/tests_examples/testpages.py deleted file mode 100644 index 5516e1a..0000000 --- a/tests_examples/testpages.py +++ /dev/null @@ -1,97 +0,0 @@ -import datetime - -import flask -from flask import render_template, Flask, url_for, redirect - -app = Flask(__name__) - -sampleweek = ([{'start': '08:30', 'end': '11:00', 'dur': '2:30', 'name': "Rechnerarchitekturen", - 'room': "A266 Hörsaal", 'weekday': 0, 'day': 11}, - {'start': '09:30', 'end': '12:00', 'dur': '2:30', 'name': "Netztechnik 1", 'room': "", 'weekday': 1, - 'day': 12}, - {'start': '08:30', 'end': '12:00', 'dur': '3:30', 'name': "Info3", 'room': "", 'weekday': 2, - 'day': 13}, - {'start': '08:30', 'end': '12:00', 'dur': '3:30', 'name': "Info3", 'room': "", 'weekday': 3, - 'day': 14}, {'start': '11:00', 'end': '12:30', 'dur': '1:30', 'name': "Systemnahes Programmieren", - 'room': "A266 Hörsaal", 'weekday': 0, 'day': 11}, - {'start': '13:00', 'end': '16:15', 'dur': '3:15', 'name': "Java", 'room': "A266 Hörsaal", - 'weekday': 3, 'day': 14}], [{'day': 11, 'short': 'mon', 'long': 'Montag', 'mensa': [ - 'Frikadelle Hausfrauen Art mit Kräutersoße und Risoleekartoffeln Kräutersoße', - 'Veganes Gemüseschnitzel Risoleekartoffeln Kräutersoße', 'Kaiserschmarrn mit Rosinen und Apfelmus Vanillesoße']}, - {'day': 12, 'short': 'tue', 'long': 'Dienstag', 'mensa': [ - 'Alaska Seelachsfilet in Backteig hausgemachter Kartoffelsalat Dip', - 'Gemüsefrikadellen hausgemachter Kartoffelsalat Dip']}, - {'day': 13, 'short': 'wed', 'long': 'Mittwoch', 'mensa': [ - 'Roter Curry - Gemüseeintopf mit Hähnchenstreifen und Baguettebrötchen', - 'Roter Curry - Gemüseeintopf mit Sojastreifen und Baguettebrötchen', - 'Gebratene Gnocchis mit Karotten und Schnittlauchsoße']}, - {'day': 14, 'short': 'thu', 'long': 'Donnerstag', 'mensa': [ - 'Pasta mit Paprika, getrockneten Tomaten, Pinienkernen, Basilikum und Reibekäse', - '2010: Königsberger Klopse in Kapernsoße und Salzkartoffeln', - 'Pasta mit Hackfleisch - Champignon - Soße, Reibekäse']}, - {'day': 15, 'short': 'fri', 'long': 'Freitag', 'mensa': [ - 'Griechische Nudelpfanne mit Sojastreifen, Gemüse, Pinienkerne und Tomatensoße', - 'Griechische Nudelpfanne mit Geflügel, Gemüse, Pinienkerne und Tomatensoße']}], - datetime.date(2023, 12, 6), datetime.date(2023, 12, 20), 'Dezember 2023') - - -@app.route("/") -def index(): - return render_template('testpages.html') - - -@app.route("/kurs") -def kurs(): - return render_template("kurs.html", detected=("TINF22B3", False)) - - -@app.route("/login") -def login(): - return render_template("login.html") - - -@app.route("/noten") -def displayNoten(): - return render_template("noten.html", noten=[["Info", "nicht bestanden", 2000]], - semester=[["Sommersemester", "SoSe"]], sel="SoSe") - - -@app.route("/plan/") -def plananon(kurs): - return render_template("plan-anon.html", events=sampleweek[0], eventdays=sampleweek[1], kurs=kurs, - prev=str(sampleweek[2])[:10], next=str(sampleweek[3])[:10], mon=sampleweek[4]) - - -@app.route("/plan") -def planuser(): - return render_template("plan-user.html", events=sampleweek[0], eventdays=sampleweek[1], kurs=kurs, - prev=str(sampleweek[2])[:10], next=str(sampleweek[3])[:10], mon=sampleweek[4], name="Studi") - - -@app.route("/rapla") -def chooseRaplas(): - return render_template("rapla.html", raplas=[["TINF22B3"], ["TINF22B3"], ["TINF22B3"]]) - - -@app.route("/semester") -def getSemester(): - return render_template("semester.html", semester=[["Sommersemester 2023", "SoSeID"]]) - - -@app.route("/setsemester", methods=["POST"]) -def setSemester(): - return redirect(url_for("index")) - - -@app.route("/getrapla", methods=["POST"]) -def getRapla(): - return redirect(url_for("index")) - - -@app.route("/login", methods=["POST"]) -def login_post(): - return redirect(url_for("index")) - - -if __name__ == "__main__": - app.run(host='0.0.0.0', port=2024, debug=True)