diff --git a/app/init.py b/app/init.py index 73beb6f..32de7ab 100644 --- a/app/init.py +++ b/app/init.py @@ -1,16 +1,57 @@ import paramiko from stat import S_ISDIR, S_ISREG import re -from base64 import decodebytes + +# from base64 import decodebytes import json import mariadb + +CATEGORIES = [ + "Prüfungen", + "Klausuren", + "Übungen", + "Labore", + "Unterlagen", + "Zusammenfassungen", + "Multimedia", +] +SUBCAT_CATEGORIES = ["Klausuren", "Übungen", "Labore"] +unizeug_path = "/mnt/save/daten/Unizeug/" db = mariadb.connect( host="localhost", user="wildserver", password="DBPassword", database="Unizeug" ) -c=db.cursor() -c.execute("DROP TABLE LVAs") -c.execute("CREATE TABLE LVAs(id BIGINT(20) unsigned NOT NULL AUTO_INCREMENT,lvid MEDIUMINT unsigned, lvname VARCHAR(256), lvpath VARCHAR(256),PRIMARY KEY(id))") +c = db.cursor() +try: + c.execute("DROP TABLE LVAs") +except mariadb.OperationalError: + pass +c.execute( + "CREATE TABLE LVAs(id BIGINT(20) unsigned NOT NULL AUTO_INCREMENT,lvid VARCHAR(6), lvname VARCHAR(256), lvpath VARCHAR(256),PRIMARY KEY(id))" +) +try: + c.execute("DROP TABLE Profs") +except mariadb.OperationalError: + pass +c.execute( + "CREATE TABLE Profs(id BIGINT(20) unsigned NOT NULL AUTO_INCREMENT,name VARCHAR(256),PRIMARY KEY(id))" +) +try: + c.execute("DROP TABLE LPLink") +except mariadb.OperationalError: + pass +c.execute( + "CREATE TABLE LPLink(id BIGINT(20) unsigned NOT NULL AUTO_INCREMENT,LId bigint(20),PId bigint(20),PRIMARY KEY(id))" +) +try: + c.execute("DROP TABLE SubCats") +except mariadb.OperationalError: + pass +c.execute( + "CREATE TABLE SubCats(id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,LId BIGINT(20),PId BIGINT(20),cat TINYINT UNSIGNED,name VARCHAR(256), PRIMARY KEY(id))" +) db.commit() + + def get_dirstruct(): with open("app/pwfile.json", "r") as f: cred = json.load(f) @@ -21,27 +62,89 @@ def get_dirstruct(): # ssh.get_host_keys().add(cred["sftpurl"], 'ssh-rsa', key) ssh.connect(cred["sftpurl"], username=cred["sftpuser"], password=cred["sftpPW"]) sftp = ssh.open_sftp() - folders = sftp.listdir_attr("/mnt/save/daten/Unizeug/") + folders = sftp.listdir_attr(unizeug_path) for entry in folders: if entry is None: continue - if S_ISDIR(entry.st_mode): - fname = str(entry.filename) - regex=re.compile(r"Multimedia_only") - if regex.search(fname): + if not S_ISDIR(entry.st_mode): + continue + fname = str(entry.filename) + regex = re.compile(r"Multimedia_only") + if regex.search(fname): + continue + # print(fname) + lvid = re.search(r"\d{3}.\d{3}", fname) + # print(lvid) + if lvid is None: + continue + lvid = int(lvid.group()[:3] + lvid.group()[4:]) + name = fname[:-8] + # print(name) + # print(lvid) + cur = db.cursor() + cur.execute( + "INSERT INTO LVAs (lvid, lvname, lvpath) VALUES(?,?,?)", (lvid, name, fname) + ) + cur.execute("SELECT id FROM LVAs WHERE lvid=?", (lvid,)) + lid = cur.fetchone()[0] + db.commit() + for profsdir in sftp.listdir_attr(unizeug_path + fname + "/"): + if profsdir is None or not S_ISDIR(profsdir.st_mode): continue - # print(fname) - lvid = re.search(r"\d{3}.\d{3}", fname) - # print(lvid) - if lvid is None: + # print(profsdir.filename) + try: + lastname, firstname = re.split(r"[_\-\s]", str(profsdir.filename)) + pid = link_prof(firstname, lastname, lid) + except ValueError: + print(f"{name} is broken") continue - lvid=int(lvid.group()[:3]+lvid.group()[4:]) - name=fname[:-8] - print(name) - print(lvid) - cur=db.cursor() - cur.execute("INSERT INTO LVAs (lvid, lvname, lvpath) VALUES(?,?,?)",(lvid,name,fname)) - db.commit() + for cat in sftp.listdir_attr( + unizeug_path + fname + "/" + profsdir.filename + "/" + ): + if cat is None or not S_ISDIR(cat.st_mode): + continue + if cat.filename not in SUBCAT_CATEGORIES: + continue + idx = CATEGORIES.index(cat.filename) + for subcat in sftp.listdir_attr( + unizeug_path + + fname + + "/" + + profsdir.filename + + "/" + + cat.filename + + "/" + ): + if subcat is None or not S_ISDIR(subcat.st_mode): + continue + cur = db.cursor() + cur.execute( + "INSERT INTO SubCats (LId,PId,cat,name) VALUES(?,?,?,?)", + (lid, pid, idx, subcat.filename), + ) + db.commit() + + +def link_prof(firstname, lastname, lid): + cur = db.cursor() + cur.execute("SELECT id from Profs WHERE name=?", (lastname + " " + firstname,)) + res = cur.fetchone() + if res is not None: + cur.execute("INSERT INTO LPLink (LId,PId) VALUES(?,?)", (lid, res[0])) + db.commit() + return res[0] + cur.execute("SELECT id from Profs WHERE name=?", (firstname + " " + lastname,)) + res = cur.fetchone() + if res is not None: + cur.execute("INSERT INTO LPLink (LId,PId) VALUES(?,?)", (lid, res[0])) + db.commit() + return res[0] + cur.execute("INSERT INTO Profs (name) VALUES(?)", (lastname + " " + firstname,)) + cur.execute("SELECT id FROM Profs WHERE name=?", (lastname + " " + firstname,)) + res = cur.fetchone() + cur.execute("INSERT INTO LPLink (LId,PId) VALUES(?,?)", (lid, res[0])) + db.commit() + return res[0] if __name__ == "__main__": diff --git a/app/main.py b/app/main.py index 3b0d271..d6cdcb7 100644 --- a/app/main.py +++ b/app/main.py @@ -20,6 +20,16 @@ app.mount("/static", StaticFiles(directory="./static"), name="static") db = mariadb.connect( host="localhost", user="wildserver", password="DBPassword", database="Unizeug" ) +CATEGORIES = [ + "Prüfungen", + "Klausuren", + "Übungen", + "Labore", + "Unterlagen", + "Zusammenfassungen", + "Multimedia", +] +SUBCAT_CATEGORIES = ["Klausuren", "Übungen", "Labore"] # cur = db.cursor() @@ -91,7 +101,7 @@ async def get_submittion( fname: Annotated[str, Form()], # Path to pdf File fileId: Annotated[str, Form()], sem: Annotated[str, Form()], # Semester eg. 2024W - stype: Annotated[str, Form()], # Type of File eg. Prüfung + stype: Annotated[str, Form()], # Type of File eg. Prüfung=>0 ex_date: Annotated[str, Form()], # Date of Exam only when type is exam rects: Annotated[ str, Form() diff --git a/database_init.sql b/database_init.sql index 0390b57..5adf659 100644 --- a/database_init.sql +++ b/database_init.sql @@ -1,6 +1,7 @@ CREATE DATABASE Unizeug; USE Unizeug; -CREATE TABLE LVAs(id BIGINT(20) unsigned NOT NULL AUTO_INCREMENT,lvid MEDIUMINT unsigned, lvname VARCHAR(256), lvpath VARCHAR(256),PRIMARY KEY(id)); -CREATE TABLE Porfs(id BIGINT(20) unsigned NOT NULL AUTO_INCREMENT,name VARCHAR(256),PRIMARY KEY(id)); -CREATE TABLE LPLink(id BIGINT(20) unsigned NOT NULL AUTO_INCREMENT,LVAID bigint(20),ProfID bigint(20),PRIMARY KEY(id)); +CREATE TABLE LVAs(id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,lvid VARCHAR(6), lvname VARCHAR(256), lvpath VARCHAR(256),PRIMARY KEY(id)); +CREATE TABLE Profs(id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,name VARCHAR(256),PRIMARY KEY(id)); +CREATE TABLE LPLink(id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,LId bigint(20),PId bigint(20),PRIMARY KEY(id)); +CREATE TABLE SubCats(id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,LId BIGINT(20),PId BIGINT(20),cat TINYINT UNSIGNED,name VARCHAR(256), PRIMARY KEY(id)); CREATE TABLE FIP(id UUID DEFAULT(UUID()), filename VARCHAR(256), PRIMARY KEY(id)); diff --git a/index.html b/index.html index dec59cc..3c9fb7e 100644 --- a/index.html +++ b/index.html @@ -34,19 +34,19 @@

- +
- +
- +
- +
- +
- -
- + +
+