64 lines
1.9 KiB
Python
64 lines
1.9 KiB
Python
from flask_login import current_user as currentUser
|
|
import fetchDUALIS
|
|
from init import Semesterlist, User, db
|
|
from datetime import datetime
|
|
|
|
def getCookie(cookies):
|
|
"""
|
|
Liefert (letzten) Cookie der Cookies-Liste zurück.
|
|
:param cookies:
|
|
:return Cookie:
|
|
"""
|
|
cookie = 0
|
|
for c in cookies:
|
|
cookie = c.value
|
|
return cookie
|
|
|
|
|
|
async def getSemesterList(uid, token, cookie):
|
|
"""
|
|
Liefert die IDs der Semester für den User
|
|
:param uid:
|
|
:param token:
|
|
:param cookie:
|
|
:return Semester-ID-Liste:
|
|
"""
|
|
dbSemesterList = Semesterlist.query.filter_by(uid=uid).all()
|
|
semesterList = []
|
|
for semester in dbSemesterList:
|
|
semesterList += [[semester.semestername, semester.semesterid]]
|
|
semesterList.sort(key=lambda x: x[-1], reverse=True)
|
|
shortList = (int(x[0][-2:]) for x in semesterList)
|
|
for shortYear in shortList:
|
|
if (shortYear > datetime.now().year-2000) or (len(semesterList) == 6):
|
|
return semesterList
|
|
return await semesterDualisToDB(semesterList, token, cookie)
|
|
|
|
|
|
async def semesterDualisToDB (semesterlist, token, cookie):
|
|
"""
|
|
Gleicht die Semester-Einträge der mitgegebenen Liste mit den Semester-Einträgen von Dualis ab und schreibt
|
|
Differenzen in die Datenbank.
|
|
:param semesterlist:
|
|
:param token:
|
|
:param cookie:
|
|
:return Semester-ID-Liste:
|
|
"""
|
|
semesterDualis = await fetchDUALIS.getSem(token, cookie)
|
|
for i in semesterDualis:
|
|
if i not in semesterlist:
|
|
semsterItem = Semesterlist(semestername=i[0], semesterid=i[1], uid=currentUser.id,
|
|
itemid=currentUser.id * int(i[1][-7:]) // 1000000)
|
|
db.session.add(semsterItem)
|
|
db.session.commit()
|
|
return semesterDualis
|
|
|
|
|
|
def loadUser(uid):
|
|
"""
|
|
Hilfsfunktion, die den User für die UID zurückgibt.
|
|
:param uid:
|
|
:return User:
|
|
"""
|
|
return User.query.filter_by(id=uid).first()
|