feat: orchestrer le pipeline M11
Co-authored-by: Codex/gpt-5.6-terra <codex-gpt-5-6-terra@agents.invalid>
This commit is contained in:
31
pronote_sync/pipeline/steps/normalize.py
Normal file
31
pronote_sync/pipeline/steps/normalize.py
Normal file
@@ -0,0 +1,31 @@
|
||||
"""É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,
|
||||
)
|
||||
Reference in New Issue
Block a user