colles.mp2i-vms.fr/scrape_csv.py

70 lines
2.4 KiB
Python

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()