PRONOTE_ENT était incorrectement traité comme obligatoire, bloquant
le pipeline quand l'ENT n'est pas configuré. Permet désormais la
connexion directe à Pronote sans ENT (ent=None), conformément à la
spécification (GUIDE_DEV_PYTHON.md §3.1.2).
Corrige deux bugs :
- Mode pronotepy explicite sans PRONOTE_ENT : erreur « ent sont requis »
- Mode auto sans iCal ni PRONOTE_ENT : erreur « ni la source iCal ni
pronotepy n'est configurée » alors que les credentials sont présents
Changements :
- client.py : _connect() n'exige plus ent, résolution conditionnelle
- fallback.py : _is_pronotepy_configured() sans vérifier ent
- tests : 10 tests de régression (RED→GREEN)
Co-authored-by: opencode/coder litellm/coder@agents.invalid
Co-authored-by: opencode/test-engineer litellm/test-engineer@agents.invalid
Configuration (D1+D3) :
- PronoteSettings : ajout pronote_url (str | None) et account_type
(Literal student/parent, défaut parent)
Parsing iCal (Fix 4+7) :
- parse_ical : détection STATUS:CANCELLED en plus de CATEGORIES
- parse_body : list[tuple[date, str]] au lieu de dict[date, str]
pour préserver les blocs multiples à la même date
- parse_homework_blocks : adapté aux listes
Co-authored-by: opencode/coder <coder@agents.invalid>
- PronoteClientProtocol : Protocol (get_messages, get_informations,
get_agenda_fallback) pour la logique de repli
- PronoteClient : encapsule pronotepy.Client (connexion paresseuse)
avec API réelle 2.15.7 (lessons/homework/discussions/information_and_surveys)
- Erreurs PronoteAPIError et ValueError catchées, loggées avec
redact_exception, retournent des résultats vides
- Aucune fuite de secret (get_secret_value() uniquement à la connexion)
- pre-commit : ajout de pronotepy au hook mypy
Co-authored-by: opencode/coder <coder@agents.invalid>