import csv from datetime import date, time, timedelta from colloscope.models import * def scrape(periode, chemin): with open(chemin, "r") as file: reader = csv.reader(file) headers, *colloscope = list(reader) for l in colloscope: print(l) for colleur, matiere, jour, heure, *(rotations) in colloscope: nom_colleur = colleur.lstrip("Mme.").title() civilite = "M" if colleur.startswith("M.") else "F" if not Colleur.objects.filter(nom=nom_colleur, civilite=civilite).exists(): c = Colleur(civilite=civilite, nom=nom_colleur) c.save() else: c = Colleur.objects.get(nom=nom_colleur, civilite=civilite) if not Subject.objects.filter(classe=periode.classe, libelle=matiere).exists(): m = Subject(classe=periode.classe, libelle=matiere, code=matiere.upper()) m.save() else: m = Subject.objects.get(classe=periode.classe, libelle=matiere) jours_dict = {"dimanche": 0, "lundi": 1, "mardi": 2, "mercredi": 3, "jeudi": 4, "vendredi": 5, "samedi": 6} j = jours_dict[jour] h = time(int(heure[:-1]), 0) if matiere=="InfoTP": d = timedelta(hours=2) c2 = 9 else: d = timedelta(hours=1) c2 = 3 print(f"--> Traitement de {c=}, {m=}, {j=}, {h=}, {d=}, {c2=}") if not Slot.objects.filter(periode=periode, jour=j, heure=h, duree=d, matiere=m, colleur=c, est_colle=True, capacite=c2).exists(): creneau = Slot(periode=periode, jour=j, heure=h, duree=d, salle="nc", matiere=m, colleur=c, est_colle=True, capacite=c2) creneau.save() else: creneau = Slot.objects.get(periode=periode, jour=j, heure=h, duree=d, matiere=m, colleur=c, est_colle=True, capacite=c2) for i, r in enumerate(rotations): sem = headers[4+i].split("/") sem[2] = "20"+sem[2] sem.reverse() s = date.fromisoformat("-".join(sem)) + (j-1) * timedelta(days=1) if not Colle.objects.filter(creneau=creneau, date=s): rot = Colle(creneau=creneau, date=s) rot.save() else: rot = Colle.objects.get(creneau=creneau, date=s) rot.groupes.add(Group.objects.get(libelle=r)) def main(): periode = Term.objects.get(id=3) scrape(periode, "colloscope.csv") if __name__ == "__main__": main()