Co-authored-by: Codex/gpt-5.6-terra <codex-gpt-5-6-terra@agents.invalid>
32 lines
1.2 KiB
Python
32 lines
1.2 KiB
Python
"""Étape de normalisation et d'ordonnancement déterministe des données Pronote."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
|
|
from pronote_sync.models.pronote import PronoteData
|
|
from pronote_sync.pipeline.steps.fetch import FetchedPronoteData
|
|
|
|
|
|
def normalize_step(fetched: FetchedPronoteData, *, generated_at: datetime) -> PronoteData:
|
|
"""Construit le contrat ``PronoteData`` dans un ordre déterministe.
|
|
|
|
:param fetched: Données brutes produites par :func:`fetch_step`.
|
|
:param generated_at: Horodatage de l'exécution fourni par l'orchestrateur.
|
|
:return: Données Pronote normalisées.
|
|
:rtype: PronoteData
|
|
"""
|
|
return PronoteData(
|
|
lessons=sorted(fetched.lessons, key=lambda lesson: (lesson.start, lesson.id)),
|
|
homeworks=sorted(
|
|
fetched.homeworks, key=lambda homework: (homework.due_on, homework.subject, homework.id)
|
|
),
|
|
school_events=sorted(
|
|
fetched.school_events,
|
|
key=lambda event: (event.from_date, event.to_date, event.kind.value, event.label),
|
|
),
|
|
messages=sorted(fetched.messages, key=lambda message: (message.date, message.id)),
|
|
target_date=fetched.target_date,
|
|
generated_at=generated_at,
|
|
)
|