diff options
Diffstat (limited to 'management/commands/_private.py')
-rw-r--r-- | management/commands/_private.py | 59 |
1 files changed, 38 insertions, 21 deletions
diff --git a/management/commands/_private.py b/management/commands/_private.py index 2d01e67..e018e3a 100644 --- a/management/commands/_private.py +++ b/management/commands/_private.py @@ -93,50 +93,67 @@ def get_from_db_or_create(cls, **kwargs): return obj -def get_events(timetable, year, week, soup, weeks_in_soup): +def get_events(timetable, soup, weeks_in_soup, year=None, week=None): + """Récupère tous les cours disponibles dans l’emploi du temps Celcat. + Le traîtement se limitera à la semaine indiquée si il y en a une.""" for event in soup.find_all("event"): - title = None - type_ = None - groups = None - rooms = None - notes = None - - if weeks_in_soup[event.rawweeks.text].number == week and \ - weeks_in_soup[event.rawweeks.text].year == year and \ + event_week = weeks_in_soup[event.rawweeks.text] + + # On passe le traitement si la semaine de l’événement ne correspond pas + # à la semaine passée, ou qu’il ne contient pas de groupe ou n’a pas de + # date de début ou de fin. + if (event_week.number == week and event_week.year == year or \ + year is None or week is None) and \ event.resources.group is not None and \ event.starttime is not None and event.endtime is not None: - date = weeks_in_soup[event.rawweeks.text].get_day(int( - event.day.text)) - + # On récupère la date de l’évènement à partir de la semaine + # et de la semaine référencée, puis la date de début et de fin + date = event_week.get_day(int(event.day.text)) begin = add_time(date, datetime.datetime.strptime( event.starttime.text, "%H:%M")) end = add_time(date, datetime.datetime.strptime( event.endtime.text, "%H:%M")) + # Création de l’objet cours + course = Course.objects.create(timetable=timetable, begin=begin, + end=end) + + # On récupère les groupes concernés par les cours, on les + # « consolide », puis on les insère dans l’objet cours. groups = [get_from_db_or_create(Group, timetable=timetable, celcat_name=item.text) for item in event.resources.group.find_all("item")] consolidate_groups(groups) + course.groups.add(*groups) + # On récupère le champ « remarque » if event.notes is not None: - notes = event.notes.text + course.notes = event.notes.text + # On récupère le nom du cours if event.resources.module is not None: - title = event.resources.module.item.text - elif notes is not None: - title = notes - notes = None + course.name = event.resources.module.item.text else: - title = "Aucune information" - + # Il est possible qu’un cours n’ait pas de nom. Oui oui. + # Qui sont les concepteurs de ce système ? Quels sont leurs + # réseaux ? + # Bref, dans ce cas, on déplace le champ « remarque » de + # l’objet dans le champ « nom ». + course.name, course.notes = course.notes, None + + # Récupération du type de cours if event.category is not None: - type_ = event.category.text + course.type = event.category.text + # Si un cours a une salle attribuée (oui, il est possible qu’il n’y + # en ait pas… qui sont ils, leurs réseaux, tout ça…), on les insère + # dans la base de données, et on les ajoute dans l’objet cours if event.resources.room is not None: rooms = [get_from_db_or_create(Room, name=item.text) for item in event.resources.room.find_all("item")] + course.rooms.add(*rooms) - yield title, type_, groups, rooms, notes, begin, end + yield course def get_update_date(soup): # Explication de la regex |