import csv from datetime import date, time, timedelta from colloscope.models import * from zoneinfo import ZoneInfo tz = ZoneInfo("Europe/Paris") def digest_time(h1): a = h1.split("h") return time(hour=int(a[0]), minute=int(a[1]) if a[1] != '' else 0) def scrape(periode, chemin): with open(chemin, "r") as file: reader = csv.reader(file) header1, header2, *colloscope = list(reader) for l in colloscope: print(l) for matiere, infos, *(rotations) in colloscope: if len(infos.split()) == 5: civ1, nom_colleur, j1, h1, salle = infos.split() else: civ1, nom_colleur, j1, h1, *_ = infos.split() salle = "ns" civilite = "M" if civ1 == "M." else "F" #print(civilite, nom_colleur, j1, h1, salle, rotations) colleur_obj, _ = Colleur.objects.get_or_create( name=nom_colleur, gender=civilite, ) jours_dict = {"di": 0, "lu": 1, "ma": 2, "me": 3, "je": 4, "ve": 5, "sa": 6} subject_obj, _ = Subject.objects.get_or_create( cls=periode.cls, description=matiere ) #print(repr(subject_obj)) time_ = digest_time(h1) slot_obj, _ = Slot.objects.get_or_create( term=periode, day=jours_dict[j1], time=time_, duration=timedelta(hours=1), room=salle, subject=subject_obj, colleur=colleur_obj, type=GroupType.objects.get_or_create(term=periode, description="colle")[0], capacity=3 ) print("----------------") print(slot_obj) for i, rot in enumerate(rotations): if rot=="": continue groupe, _ = Group.objects.get_or_create( term=periode,type=GroupType.objects.get_or_create(term=periode, description="colle")[0], description=rot ) date_raw = [int(a) for a in header2[i+2].split("/")] #print(date_raw) date_ = date(2025 if date_raw[1] < 9 else 2024, date_raw[1], date_raw[0]) + timedelta(days=jours_dict[j1] - 1) time_processed = datetime(day=date_.day, month=date_.month, year=date_.year, hour=time_.hour, minute=time_.minute, second=time_.second, tzinfo=tz) #print(time_processed) #print(f"{i}) {rot}, {header2[i+2]}") colle_obj, _ = Colle.objects.get_or_create( slot = slot_obj, datetime = time_processed ) colle_obj.groups.add(groupe) print(colle_obj) def main(): periode = Term.objects.get(id=5) scrape(periode, "colloscope.csv") if __name__ == "__main__": main()