Cause racine : quand pronotepy reçoit une PronoteAPIError (ex. code 20 « page expirée »), il appelle refresh() en interne, qui peut roter le token en mémoire (client.password mis à jour avec un nouveau jetonConnexionAppliMobile). Le retry peut aussi échouer — l'exception atteint get_informations()/get_messages() qui l'attrapent et retournent [] (mode dégradé). Mais _persist_credentials() n'était appelé que dans le chemin de SUCCÈS — le token rafraîchi en mémoire n'était jamais persisté. Au run suivant, token_login utilisait le token périmé → échec KeyError 'dataSec' → PronoteAuthRotationError. Correction : appeler _persist_credentials() aussi dans le chemin d'erreur de get_informations() et get_messages(), avant le return []. L'ancien token est déjà invalidé côté serveur lors du refresh — ne pas persister le nouveau token garantit la perte du seul token valide. Tests : 3 nouveaux tests (persistance dans le chemin d'erreur, sauvegarde du token rafraîchi sur erreur). 694 passés, couverture 94.93%.
50 KiB
50 KiB