feat(M3): modèles de données Pydantic (22 modèles, 10 modules)
Modèles créés : - models/agenda.py : Status, LessonStatus, HomeworkBlock, Lesson (frozen), SchoolEventKind, SchoolEvent (frozen), TheoreticalLesson (frozen) - models/homework.py : Homework (frozen) - models/message.py : MessageType, Message (frozen) - models/blog.py : BlogArticle (frozen), ExternalInfo (mutable) - models/diff.py : AgendaChangeType, AgendaChange (frozen), AgendaDiff (frozen) - models/pronote.py : PronoteData (mutable) - models/sync.py : CalDAVSyncStatus, CalDAVSyncPlan, CalDAVSyncResult (mutable) - models/synthesis.py : SynthesisInput, SynthesisResult (mutable) - models/xmpp.py : XmppMessage (frozen, external_info: ExternalInfo | None) - models/__init__.py : ré-export des 22 modèles via __all__ Conventions appliquées : - Pydantic v2 : model_config = ConfigDict(frozen=True), pas de json_encoders - StrEnum au lieu de (str, Enum) (ruff UP042) - Alias _date/_time pour éviter collision champ date/type date - Sphinx/reST docstrings sur toutes les classes - TODO.md : 11 items M3 cochés Validations (@verifier) : - ruff check : PASS (0 error) - ruff format --check : PASS (10 fichiers) - mypy strict : PASS (10 fichiers) - bandit : PASS (0 issue) - import 22 modèles : OK - sérialisation JSON (frozen + mutable) : OK - frozen immuable, PronoteData/CalDAVSyncResult mutable : OK - StrEnum isinstance str : OK - pytest : 0 test (infrastructure OK) Co-authored-by: OpenCode/orchestrator <opencode-orchestrator@agents.invalid>
This commit is contained in:
22
TODO.md
22
TODO.md
@@ -50,17 +50,17 @@ Implémenter la configuration Pydantic Settings, le masquage des secrets et la j
|
||||
|
||||
Définir tous les modèles de domaine, immuables pour les contrats, mutables pour les résultats de travail.
|
||||
|
||||
- [ ] Créer `models/agenda.py` : `Status`, `LessonStatus`, `HomeworkBlock`, `Lesson` (frozen), `SchoolEventKind`, `SchoolEvent`, `TheoreticalLesson`.
|
||||
- [ ] Créer `models/homework.py` : `Homework` (frozen, `id` = hachage stable).
|
||||
- [ ] Créer `models/message.py` : `MessageType`, `Message` (frozen).
|
||||
- [ ] Créer `models/diff.py` : `AgendaChangeType`, `AgendaChange` (frozen), `AgendaDiff` (frozen).
|
||||
- [ ] Créer `models/pronote.py` : `PronoteData` (mutable).
|
||||
- [ ] Créer `models/sync.py` : `CalDAVSyncStatus`, `CalDAVSyncPlan`, `CalDAVSyncResult` (mutable).
|
||||
- [ ] Créer `models/synthesis.py` : `SynthesisInput`, `SynthesisResult`.
|
||||
- [ ] Créer `models/blog.py` : `BlogArticle` (frozen), `ExternalInfo` (§5 bis.5/6).
|
||||
- [ ] Créer `models/xmpp.py` : `XmppMessage` (frozen) intégrant `external_info`.
|
||||
- [ ] Créer `models/__init__.py` ré-exportant tous les modèles.
|
||||
- [ ] Valider la sérialisation JSON (datetime/date en ISO) pour chaque modèle.
|
||||
- [x] Créer `models/agenda.py` : `Status`, `LessonStatus`, `HomeworkBlock`, `Lesson` (frozen), `SchoolEventKind`, `SchoolEvent`, `TheoreticalLesson`.
|
||||
- [x] Créer `models/homework.py` : `Homework` (frozen, `id` = hachage stable).
|
||||
- [x] Créer `models/message.py` : `MessageType`, `Message` (frozen).
|
||||
- [x] Créer `models/diff.py` : `AgendaChangeType`, `AgendaChange` (frozen), `AgendaDiff` (frozen).
|
||||
- [x] Créer `models/pronote.py` : `PronoteData` (mutable).
|
||||
- [x] Créer `models/sync.py` : `CalDAVSyncStatus`, `CalDAVSyncPlan`, `CalDAVSyncResult` (mutable).
|
||||
- [x] Créer `models/synthesis.py` : `SynthesisInput`, `SynthesisResult`.
|
||||
- [x] Créer `models/blog.py` : `BlogArticle` (frozen), `ExternalInfo` (§5 bis.5/6).
|
||||
- [x] Créer `models/xmpp.py` : `XmppMessage` (frozen) intégrant `external_info`.
|
||||
- [x] Créer `models/__init__.py` ré-exportant tous les modèles.
|
||||
- [x] Valider la sérialisation JSON (datetime/date en ISO) pour chaque modèle.
|
||||
|
||||
### Critères d'acceptation
|
||||
- Chaque modèle s'instancie et se sérialise en JSON valide.
|
||||
|
||||
Reference in New Issue
Block a user