93 lines
2.8 KiB
Python
93 lines
2.8 KiB
Python
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()
|