Triple authentification pronotepy (double INIT + refresh) lors d'un run #20
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Symptôme
Lors de chaque run du pipeline, on observe 3 authentifications pronotepy successives dans les logs :
Analyse préliminaire
qrcode_loginoutoken_logindansPronoteClient._connect().pronotepy.ParentClient.post()appellerefresh()qui re-login en mode token — ce refresh est interne à pronotepy, déclenché par unePronoteAPIError.refresh()se produit, probablement lors de l'appel àget_informations()qui échoue avec l'erreur 20 (voir issue dédiée #21).Ce comportement n'est pas bloquant (le pipeline fonctionne), mais il indique que le client pronotepy est rafraîchi plusieurs fois inutilement, ce qui :
Hypothèses à investiguer
PronoteClient._connect()est-il appelé plusieurs fois ? Le_clientest-il mis en cache correctement (if self._client is not None: return self._client) ?PronoteFetchercrée-t-il plusieurs instances dePronoteClient(une pour l'agenda, une pour les devoirs, une pour les messages) ?fetch_stepappelle-t-ilfetch_agenda()etfetch_homework()séparément, chacun déclenchant un_connect()?Log DEBUG
Un log complet en niveau DEBUG est disponible dans
/tmp/opencode/20260910135000-pronote-debug.log.Contexte
qr_tokenactivé0640036s.index-education.net(Bordeaux, HubEduConnect)Attendu
Investiguer pourquoi le client pronotepy s'authentifie 3 fois par run et réduire à 1 authentification (login initial) + au maximum 1 refresh interne si le serveur l'exige.
Issue GitHub pronotepy liée
L'issue upstream bain3/pronotepy#344 (« HTTP sessions are leaked: no way to close a client, and failed inits abandon their session ») documente le mécanisme derrière les multiples authentifications :
_Communicationouvre unerequests.Sessionqui n'est jamais ferméeqrcode_logincrée un premier client temporaire, fait un POST, puis retourne un second client viatoken_login()— ce qui explique le double INIT initialL'issue propose d'ajouter une méthode
.close(), le support de context manager (__enter__/__exit__), et de nettoyer les échecs d'initialisation client.Statut upstream : ouvert (août 2026), non corrigé dans la 2.15.7.