fix: persister le token même dans le chemin d'erreur de get_informations/get_messages
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%.
This commit is contained in:
@@ -455,6 +455,7 @@ class PronoteClient:
|
||||
"Échec de la récupération des messages Pronote : %s",
|
||||
redact_exception(exc),
|
||||
)
|
||||
self._persist_credentials()
|
||||
return []
|
||||
|
||||
def get_informations(self) -> list[Message]:
|
||||
@@ -494,6 +495,7 @@ class PronoteClient:
|
||||
"Échec de la récupération des informations Pronote : %s",
|
||||
redact_exception(exc),
|
||||
)
|
||||
self._persist_credentials()
|
||||
return []
|
||||
|
||||
def get_lessons(self, start: date, end: date) -> list[Lesson]:
|
||||
|
||||
Reference in New Issue
Block a user