diff options
| -rw-r--r-- | management/commands/_private.py | 95 | 
1 files changed, 49 insertions, 46 deletions
| diff --git a/management/commands/_private.py b/management/commands/_private.py index 0b26b4e..23083e1 100644 --- a/management/commands/_private.py +++ b/management/commands/_private.py @@ -80,6 +80,54 @@ def get_from_db_or_create(cls, **kwargs):      return obj +def get_event(timetable, event, event_week): +    """Renvoie une classe Course à partir d’un événement récupéré par BS4""" +    # On récupère la date de l’évènement à partir de la semaine +    # et de la semaine référencée, puis l’heure de début et de fin +    date = event_week + datetime.timedelta(int(event.day.text)) +    begin = add_time(date, event.starttime.text) +    end = add_time(date, event.endtime.text) + +    # 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: +        course.notes = event.notes.text + +    # On récupère le nom du cours +    if event.resources.module is not None: +        course.name = event.resources.module.item.text +    else: +        # 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: +        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) + +    return course +  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.""" @@ -94,52 +142,7 @@ def get_events(timetable, soup, weeks_in_soup, year=None, week=None):              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: -            # On récupère la date de l’évènement à partir de la semaine -            # et de la semaine référencée, puis l’heure de début et de fin -            date = event_week + datetime.timedelta(int(event.day.text)) -            begin = add_time(date, event.starttime.text) -            end = add_time(date, event.endtime.text) - -            # 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: -                course.notes = event.notes.text - -            # On récupère le nom du cours -            if event.resources.module is not None: -                course.name = event.resources.module.item.text -            else: -                # 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: -                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 course +            yield get_event(timetable, event, event_week)  def get_update_date(soup):      # Explication de la regex | 
