fix: persister le token après chaque opération de données + corriger doc QR code

Cause racine : pronotepy peut rafraîchir (rotater) le token en mémoire pendant
l'exécution via refresh() automatique après une PronoteAPIError. L'ancien code
ne persistait les credentials qu'après le login initial, pas après les
opérations de données. Le token roté en mémoire était perdu → au run suivant,
token_login échouait avec le token périmé (KeyError 'dataSec').

Correction :
- PronoteClient._persist_credentials() : méthode centralisée qui persiste
  export_credentials() après chaque opération réussie (get_lessons,
  get_homeworks, get_messages, get_informations)
- Le token rafraîchi par le serveur pendant l'exécution est maintenant
  toujours persisté, même si le pipeline échoue ensuite

Documentation :
- .env.example : variables QR plus visibles (exemple qr_token décommentable)
- AGENTS.md : QR code depuis le site web Pronote (pas l'app mobile),
  persistance après chaque opération de données
- Wiki GuidePronote : procédure corrigée (site web, pas app Android/iOS),
  mention de la persistance après chaque opération

Tests : 5 nouveaux tests de persistance (691 passés, couverture 94.92%)
This commit is contained in:
2026-09-10 12:10:42 +02:00
parent 7dc48f6f43
commit d26cef8d3d
4 changed files with 240 additions and 14 deletions

View File

@@ -11,17 +11,17 @@ PRONOTE_AGENDA_SOURCE=auto
PRONOTE_HOMEWORK_SOURCE=auto
PRONOTE_MESSAGES_SOURCE=pronotepy
# Mode d'authentification Pronote
# "password" (défaut) : authentification classique URL + identifiant + mot de passe
# "qr_token" : authentification par QR code puis token persistant
# --- Authentification Pronote ---
# Mode d'authentification : "password" (défaut) ou "qr_token"
# qr_token : pour les instances utilisant HubEduConnect/EduConnect où le mot de passe échoue
# Voir le wiki GuidePronote pour la procédure d'enrôlement QR code
PRONOTE_AUTH_MODE=password
# Fichier JSON du QR code Pronote (enrôlement initial, mode qr_token uniquement)
# À générer depuis l'application mobile Pronote. Le QR code expire ~10 minutes.
# --- Mode qr_token (décommenter et renseigner pour l'authentification par QR code) ---
# Le QR code se génère sur le site web Pronote (espace parent > paramètres > QR code)
# Le QR code expire ~10 minutes après génération
# PRONOTE_AUTH_MODE=qr_token
# PRONOTE_QR_CODE_FILE=/path/to/qr_code.json
# PIN à 4 chiffres pour l'enrôlement QR code (mode qr_token uniquement)
# SENSIBLE : ne jamais committer cette valeur
# PRONOTE_QR_PIN=1234
# --- CalDAV ---