Merge pull request 'fix(pronote): ignorer les informations en mode qr_token' (#44) from fix/issue-21-qr-token-informations into main

This commit was merged in pull request #44.
This commit is contained in:
2026-09-12 19:21:25 +02:00
6 changed files with 289 additions and 18 deletions
+13 -5
View File
@@ -2279,6 +2279,12 @@ méthodes agenda/devoirs ne transforment jamais une erreur en liste vide : elles
version expurgée puis lèvent une erreur expurgée avec `from None`. Les méthodes de messages et
d'informations sont non critiques et peuvent retourner une liste vide avec un warning.
En mode `qr_token`, `get_informations()` est ignorée : elle retourne immédiatement `[]` sans
connexion, verrou ni appel réseau, et journalise un message INFO unique. L'endpoint
`PageActualites` renvoie en effet une erreur pronotepy 20 sur les instances HubEduConnect
testées, provoquant un refresh redondant du token. Ce comportement n'est pas configurable ;
`get_messages()` n'est pas concernée par ce contournement.
Les objets renvoyés par `client.homework(start, end)` couvrent une fenêtre. Le résultat destiné à
un jour cible est donc filtré explicitement sur `homework.date == target_date`.
@@ -2290,11 +2296,13 @@ d'authentification et de récupération par un verrou POSIX local non bloquant,
`.pronote_auth_state.json.lock`, à côté de `.pronote_auth_state.json`.
Le verrou couvre l'ensemble du cycle QR/token : chargement de l'état, connexion par token ou
enrôlement QR initial, opération de données (agenda, devoirs, messages ou informations), puis
persistance des credentials actualisées. Une tentative concurrente échoue immédiatement avec une
erreur d'état d'authentification expurgée ; elle ne patiente pas et ne relance pas
l'authentification. Le contenu du token, le PIN et les autres credentials ne sont jamais inclus
dans les logs ni dans ce message d'erreur.
enrôlement QR initial, opération de données (agenda, devoirs, messages ; informations hors mode
`qr_token`), puis persistance des credentials actualisées. En mode `qr_token`, `get_informations()`
est ignorée (retour immédiat `[]` sans connexion ni verrou) : elle n'acquiert pas le verrou et ne
déclenche aucune persistance. Une tentative concurrente échoue immédiatement avec une erreur d'état
d'authentification expurgée ; elle ne patiente pas et ne relance pas l'authentification. Le contenu
du token, le PIN et les autres credentials ne sont jamais inclus dans les logs ni dans ce message
d'erreur.
Ce mécanisme est un contrat **local** : il coordonne des processus sur le même hôte Linux et un
filesystem local. Pour des déploiements conteneurisés, les conteneurs qui partagent le même compte