From d82bd8ffd8fbe8fdf968b10888e3539b8c7d271e Mon Sep 17 00:00:00 2001 From: Codex Date: Sat, 12 Sep 2026 14:00:33 +0200 Subject: [PATCH] =?UTF-8?q?fix(pronote):=20pr=C3=A9server=20les=20cours=20?= =?UTF-8?q?d=C3=A9plac=C3=A9s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pronote_sync/sources/pronote/client.py | 7 ++- pronote_sync/sources/pronote/ical.py | 10 ++-- pronote_sync/sources/pronote/lessons.py | 79 +++++++++++++++++++++++++ tests/unit/test_ical.py | 33 +++++++++++ tests/unit/test_pronote_client.py | 18 ++++++ tests/unit/test_pronote_lessons.py | 77 ++++++++++++++++++++++++ 6 files changed, 217 insertions(+), 7 deletions(-) create mode 100644 pronote_sync/sources/pronote/lessons.py create mode 100644 tests/unit/test_pronote_lessons.py diff --git a/pronote_sync/sources/pronote/client.py b/pronote_sync/sources/pronote/client.py index 7f5c2ab..48670b1 100644 --- a/pronote_sync/sources/pronote/client.py +++ b/pronote_sync/sources/pronote/client.py @@ -25,10 +25,11 @@ import requests from pronote_sync.config.settings import PronoteSettings from pronote_sync.errors import PronoteAuthRotationError -from pronote_sync.models.agenda import Lesson, LessonStatus +from pronote_sync.models.agenda import Lesson from pronote_sync.models.homework import Homework from pronote_sync.models.message import Message, MessageType from pronote_sync.sources.pronote.auth_state import PronoteAuthState +from pronote_sync.sources.pronote.lessons import collapse_replaced_lessons, lesson_status from pronote_sync.utils.redaction import redact_exception, redact_secrets from pronote_sync.utils.uid import generate_deterministic_uid, normalize_pronote_uid @@ -573,12 +574,12 @@ class PronoteClient: teachers=tuple(lesson.teacher_names or ()), rooms=tuple(lesson.classrooms or ()), group=lesson.group_name, - status=(LessonStatus.CANCELLED if lesson.canceled else LessonStatus.NORMAL), + status=lesson_status(getattr(lesson, "status", None), lesson.canceled), content=content.description if content is not None else None, ) ) self._persist_credentials() - return lessons + return collapse_replaced_lessons(lessons) def get_homeworks(self, start: date, end: date) -> list[Homework]: """Récupère les devoirs via ``pronotepy``. diff --git a/pronote_sync/sources/pronote/ical.py b/pronote_sync/sources/pronote/ical.py index 4e7ecc3..4a279e5 100644 --- a/pronote_sync/sources/pronote/ical.py +++ b/pronote_sync/sources/pronote/ical.py @@ -35,6 +35,7 @@ from ...models.agenda import ( from ...models.homework import Homework from ...utils.redaction import redact_exception, redact_url from ...utils.uid import generate_deterministic_uid, normalize_pronote_uid +from .lessons import collapse_replaced_lessons _HEADER_LABEL_PATTERN = re.compile( r"(?P