######################################## # -- Python Script für UCS Import -- # # -- by Patrick vom Hagen 2024 -- # ######################################## ############################################################### # IMPORT - standard Python imports für benötigte Bibliotheken # from src import step1, step2, step3, Logger import pandas as pd # pandas für Datenmanagement import chardet # chardet erkennt Formatierung - Umwandlung des erkannten Formats in UTF-8 import csv # zur Verarbeitung von .csv Dateien import uuid # zur Generierung von neuen UUIDs import sys # zum Speichern der Konsolen Outputs in ein Log File import os # ############################# # Flags / globale Variablen # del_zeros = False # Boolean, ob führende Nullen bei Klassen entfernt werden sollen get_typos = False # Boolean, ob geringe Unterschiede zwischen den Listen ausgegeben werden sollen test_user = [] # Array in dem Spezialuser gespeichert und wieder eingefügt werden school_id = 'HL' # HL-Tag für Klassen ox_context = 0 # OX Context pro Schule mail_quota_lul = 2048 # MailUserQuota LuL ox_quota_lul = 20480 # oxUserQuota LuL mail_quota_sus = 1024 # MailUserQuota SuS ox_quota_sus = 5120 # oxUserQuota LuL ####################### # MAIN FUNCTION START # if __name__ == "__main__": # Erstellt oder löscht Inhalte vorhandener Logdatei und loggt Konsolenausgaben log_file_path = 'log.txt' if os.path.exists(log_file_path): open(log_file_path, 'w').close() sys.stdout = Logger.Logger(log_file_path) print("Schul-IT UCS-Import Tool:\n") dev = True # CHANGE FOR PRODUCTION RUN <------ # ----------------------------------------------------------------- # # Step 1 - Dateien wählen, formatieren, einlesen | Variablen setzen # print("Step1: Listen einlesen\n") # ToDo Daten mit UI einlesen # lehrer_liste_neu = "./Data/SaM/export_lehrer_SaM.csv" lehrer_liste_neu = "./Data/RoterHahn/exportLehrer.csv" lehrer_liste_system = "./Data//RoterHahn/systemLehrer.csv" schueler_liste_neu = "./Data/RoterHahn/exportSchueler.csv" schueler_liste_system = "./Data/RoterHahn/systemSchueler.csv" # Variablen füllen: if not dev: school_id = "HL070" + input("Schul-ID eingeben HL070:") ox_context = input("OX-Context der Schule eingeben:") if input("Klassen mit führenden Nullen? (y/n) ").lower() == "y": del_zeros = False else: del_zeros = True print("Schul ID:", school_id, "\nOX-Context:", ox_context, "\nNullen:", del_zeros) lul_new = step1.check_export_file(lehrer_liste_neu) # print("Spalten der Import Liste - Lehrer: ", lul_new.columns) lul_sys = step1.create_dataframe_system(lehrer_liste_system) sus_new = step1.check_export_file(schueler_liste_neu) # print("Spalten der Import Liste - Schüler: ", sus_new.columns) sus_sys = step1.create_dataframe_system(schueler_liste_system) # Test- und Funktionsuser auslagern keywords = ['Test', 'test', 'Raum', 'raum', 'User', 'user', 'Tafel', 'tafel', 'Admin', 'admin'] lul_testuser_df = step1.extract_testusers(lul_sys, keywords) print("Anzahl Test- / Systemuser LuL:", len(lul_testuser_df)) sus_testuser_df = step1.extract_testusers(sus_sys, keywords) print("Anzahl Test- / Systemuser SuS:", len(sus_testuser_df)) # in Datasets aufteilen - Testuser, Abgleich, UUIDs # ---------------------------------------------------- # # Step 2 - auf name, vorname reduzieren und abgleichen # print("\nStep2: Listen abgleichen") # 2.1 Data Frames für Abgleich erstellen print(" Lehrer:innen:") lul_matched, new_lul = step2.compare_data(lul_new, lul_sys) print("\n Schüler:innen:") sus_matched, new_sus = step2.compare_data(sus_new, sus_sys,) print("Step2 completed! \n") sys.stdout = sys.__stdout__ # ----------------------------------------------------------------------------------------# # Step 3 - Import Data generieren - klasse, uuids, weiteres in einer Liste zusammenführen # # Lul: Namen + UUIDs + Testuser lul_import = step3.merch_uuids(new_lul, lul_matched, dev) # lul_import = step3.add_school_data(lul_import, school_id, ox_context, mail_quota_lul, ox_quota_lul) print(lul_import[['name', 'klasse', 'schuelerid']]) # SuS: Namen + UUIDs + Klassen + Testuser # sus_import = step3.add_school_data(sus_sys, school_id, ox_context, mail_quota_sus, ox_quota_sus)