-
fix: A42 terminé — client httpx partagé par boucle (v7.28.0)
released this
2026-10-01 23:09:45 -04:00 | 92 commits to main since this releaseapp/services/http_client.py:async with shared_client(timeout=15) as client:remplace les 49 créationsasync with httpx.AsyncClient(
de 14 fichiers (gitea ×21, providers oidc/oauth ×11, calendar ×4,
automations ×3…) — le pool de connexions est réutilisé au lieu d'être
recréé à chaque appel. aexit no-op (le client partagé ne se ferme
pas à la sortie).- Cache par (boucle d'event, kwargs) en WeakKeyDictionary : un
AsyncClient n'est JAMAIS partagé entre deux loops (piège des tests
« Event loop is closed ») — une boucle par test = client propre
collecté avec la boucle. Clé = kwargs triés, repr() pour les valeurs
non hashables (headers=dict → TypeError rattrapé par la suite). - Laissés délibérément : github_adapter (transport MockTransport
injecté), webhook_outbound (client « own_client » fermé par la
fonction). - Tests :
test_http_client_shared_and_loop_scoped(réutilisation mêmes
kwargs / cloisonné kwargs / cloisonné loop) ; le stub des webhooks
patche aussi la fabriquehttp_client.httpx+ purge du cache (avant :
webhook_outbound.httpx patché mais la fabrique partagée créait un vrai
client → réseau réel dans les tests).
suite 1091/1091 · ruff OK · docs à jour
Downloads