From 90414449f9f74b675d3793c2c48a796f9bfe4b29 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Mon, 27 Nov 2017 17:14:14 +0100 Subject: Adaptation de la commande de mise à jour des emplois du temps aux changements effectués sur la structure de la base de données --- management/commands/_private.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'management/commands/_private.py') diff --git a/management/commands/_private.py b/management/commands/_private.py index 4dd9262..171b6e9 100644 --- a/management/commands/_private.py +++ b/management/commands/_private.py @@ -19,7 +19,7 @@ import re from bs4 import BeautifulSoup from django.utils import timezone -from edt.models import Group, Room, Course +from edt.models import Course, Group, Room from edt.utils import get_week import requests @@ -30,10 +30,10 @@ def add_time(date, time): delta = datetime.timedelta(hours=ptime.hour, minutes=ptime.minute) return date + delta -def delete_courses_in_week(timetable, year, week, today): +def delete_courses_in_week(source, year, week, today): start, end = get_week(year, week) Course.objects.filter(begin__gte=max(start, today), begin__lt=end, - timetable=timetable).delete() + source=source).delete() def get_from_db_or_create(cls, **kwargs): obj = cls.objects.all().filter(**kwargs) @@ -45,7 +45,7 @@ def get_from_db_or_create(cls, **kwargs): return obj -def get_event(timetable, event, event_week, today): +def get_event(source, event, event_week, today): """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 @@ -58,10 +58,10 @@ def get_event(timetable, event, event_week, today): return # Création de l’objet cours - course = Course.objects.create(timetable=timetable, begin=begin, end=end) + course = Course.objects.create(source=source, begin=begin, end=end) # On récupère les groupes concernés par les cours - groups = [get_from_db_or_create(Group, timetable=timetable, + groups = [get_from_db_or_create(Group, source=source, celcat_name=item.text) for item in event.resources.group.find_all("item")] course.groups.add(*groups) @@ -96,7 +96,7 @@ def get_event(timetable, event, event_week, today): return course -def get_events(timetable, soup, weeks_in_soup, today, year=None, week=None): +def get_events(source, soup, weeks_in_soup, today, 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"): @@ -110,7 +110,7 @@ def get_events(timetable, soup, weeks_in_soup, today, 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: - course = get_event(timetable, event, event_week, today) + course = get_event(source, event, event_week, today) # On renvoie le cours si il n’est pas nul if course is not None: -- cgit v1.2.1 From 81cb9b8c6a96fa8529c6d7f6ca55dfd56a1f2e5d Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Thu, 11 Jan 2018 14:09:33 +0100 Subject: On remplace les
dans le champ remarque par des retours à la ligne lors du parsage, puis on les remplace à nouveau par des
lors du rendu des templates. --- management/commands/_private.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'management/commands/_private.py') diff --git a/management/commands/_private.py b/management/commands/_private.py index 171b6e9..0a3d5fb 100644 --- a/management/commands/_private.py +++ b/management/commands/_private.py @@ -68,7 +68,7 @@ def get_event(source, event, event_week, today): # On récupère le champ « remarque » if event.notes is not None: - course.notes = event.notes.text + course.notes = "\n".join(event.notes.find_all(text=True)) # On récupère le champ « nom » if event.resources.module is not None: -- cgit v1.2.1 From 76fef8f3e0b3ad77f632a9e4d2c048607a1cf21b Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Thu, 18 Jan 2018 13:42:49 +0100 Subject: Mise à jour des copyrights --- management/commands/_private.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'management/commands/_private.py') diff --git a/management/commands/_private.py b/management/commands/_private.py index 0a3d5fb..e78c3c2 100644 --- a/management/commands/_private.py +++ b/management/commands/_private.py @@ -1,4 +1,4 @@ -# Copyright (C) 2017 Alban Gruin +# Copyright (C) 2017-2018 Alban Gruin # # celcatsanitizer is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published -- cgit v1.2.1 From c9388e29b2f9ee18a9e190683a8a33fb710684c5 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Sat, 27 Jan 2018 17:56:45 +0100 Subject: PEP8 --- management/commands/_private.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'management/commands/_private.py') diff --git a/management/commands/_private.py b/management/commands/_private.py index e78c3c2..bac749b 100644 --- a/management/commands/_private.py +++ b/management/commands/_private.py @@ -25,16 +25,19 @@ from edt.utils import get_week import requests import edt + def add_time(date, time): ptime = datetime.datetime.strptime(time, "%H:%M") delta = datetime.timedelta(hours=ptime.hour, minutes=ptime.minute) return date + delta + def delete_courses_in_week(source, year, week, today): start, end = get_week(year, week) Course.objects.filter(begin__gte=max(start, today), begin__lt=end, source=source).delete() + def get_from_db_or_create(cls, **kwargs): obj = cls.objects.all().filter(**kwargs) @@ -45,6 +48,7 @@ def get_from_db_or_create(cls, **kwargs): return obj + def get_event(source, event, event_week, today): """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 @@ -96,17 +100,18 @@ def get_event(source, event, event_week, today): return course + def get_events(source, soup, weeks_in_soup, today, 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"): event_week = weeks_in_soup[event.rawweeks.text] - event_week_num = event_week.isocalendar()[1] # Numéro de semaine + event_week_num = event_week.isocalendar()[1] # Numéro de semaine # 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_num == week and event_week.year == year or \ + if (event_week_num == 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: @@ -116,6 +121,7 @@ def get_events(source, soup, weeks_in_soup, today, year=None, week=None): if course is not None: yield course + def get_update_date(soup): # Explication de la regex # @@ -140,6 +146,7 @@ def get_update_date(soup): date = datetime.datetime(year, month, day, hour, minute, second) return timezone.make_aware(date) + def get_weeks(soup): # Les semaines sont référencées de manière assez… exotique # En gros, il y a une liste d’éléments span qui contiennent une sorte d’ID @@ -151,13 +158,14 @@ def get_weeks(soup): # Un cours contient donc un ID de semaine, puis le nombre de jours après le # début de cette semaine. weeks = {} - for span in soup.find_all("span"): # Liste de toutes les semaines définies + for span in soup.find_all("span"): # Liste de toutes les semaines définies # On parse la date et on la fait correspondre à l’ID weeks[span.alleventweeks.text] = timezone.make_aware( datetime.datetime.strptime(span["date"], "%d/%m/%Y")) return weeks + def get_xml(url): user_agent = "celcatsanitizer/" + edt.VERSION req = requests.get(url, headers={"User-Agent": user_agent}) -- cgit v1.2.1 From aab8372b27c27becbdf875d6c30fa49ea218abf4 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Sun, 28 Jan 2018 11:20:49 +0100 Subject: Remplacement de la fonction get_from_db_or_create() par objects.get_or_create() --- management/commands/_private.py | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) (limited to 'management/commands/_private.py') diff --git a/management/commands/_private.py b/management/commands/_private.py index bac749b..0f87179 100644 --- a/management/commands/_private.py +++ b/management/commands/_private.py @@ -38,17 +38,6 @@ def delete_courses_in_week(source, year, week, today): source=source).delete() -def get_from_db_or_create(cls, **kwargs): - obj = cls.objects.all().filter(**kwargs) - - obj = obj.first() - if obj is None: - obj = cls(**kwargs) - obj.save() - - return obj - - def get_event(source, event, event_week, today): """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 @@ -65,8 +54,8 @@ def get_event(source, event, event_week, today): course = Course.objects.create(source=source, begin=begin, end=end) # On récupère les groupes concernés par les cours - groups = [get_from_db_or_create(Group, source=source, - celcat_name=item.text) + groups = [Group.objects.get_or_create(source=source, + celcat_name=item.text)[0] for item in event.resources.group.find_all("item")] course.groups.add(*groups) @@ -94,7 +83,7 @@ def get_event(source, event, event_week, today): # 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) + rooms = [Room.objects.get_or_create(name=item.text)[0] for item in event.resources.room.find_all("item")] course.rooms.add(*rooms) -- cgit v1.2.1 From 37d80d84d8ce6cb0a17a0e4179e4c7a453f7fcc2 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Sun, 28 Jan 2018 11:26:56 +0100 Subject: Remplacement de l’arithmétique de date et heure par datetime.combine() --- management/commands/_private.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'management/commands/_private.py') diff --git a/management/commands/_private.py b/management/commands/_private.py index 0f87179..4e35990 100644 --- a/management/commands/_private.py +++ b/management/commands/_private.py @@ -28,8 +28,7 @@ import edt def add_time(date, time): ptime = datetime.datetime.strptime(time, "%H:%M") - delta = datetime.timedelta(hours=ptime.hour, minutes=ptime.minute) - return date + delta + return datetime.datetime.combine(date, ptime) def delete_courses_in_week(source, year, week, today): -- cgit v1.2.1 From ca745d43066dcc1b9f8abd9e242f6af164630b94 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Sun, 28 Jan 2018 11:54:06 +0100 Subject: Revert "Remplacement de l’arithmétique de date et heure par datetime.combine()" This reverts commit 37d80d84d8ce6cb0a17a0e4179e4c7a453f7fcc2. --- management/commands/_private.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'management/commands/_private.py') diff --git a/management/commands/_private.py b/management/commands/_private.py index 4e35990..0f87179 100644 --- a/management/commands/_private.py +++ b/management/commands/_private.py @@ -28,7 +28,8 @@ import edt def add_time(date, time): ptime = datetime.datetime.strptime(time, "%H:%M") - return datetime.datetime.combine(date, ptime) + delta = datetime.timedelta(hours=ptime.hour, minutes=ptime.minute) + return date + delta def delete_courses_in_week(source, year, week, today): -- cgit v1.2.1 From 9b312281e0f2a9668ab90d77f212c9618daec7db Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Sat, 10 Feb 2018 15:13:20 +0100 Subject: Correction des imports --- management/commands/_private.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'management/commands/_private.py') diff --git a/management/commands/_private.py b/management/commands/_private.py index 0f87179..94c1918 100644 --- a/management/commands/_private.py +++ b/management/commands/_private.py @@ -19,8 +19,8 @@ import re from bs4 import BeautifulSoup from django.utils import timezone -from edt.models import Course, Group, Room -from edt.utils import get_week +from ...models import Course, Group, Room +from ...utils import get_week import requests import edt -- cgit v1.2.1