Skip to content

chore(tests): fail on DeprecationWarning - #50

Merged
PixiBixi merged 1 commit into
masterfrom
chore/warnings-as-errors
Aug 1, 2026
Merged

chore(tests): fail on DeprecationWarning#50
PixiBixi merged 1 commit into
masterfrom
chore/warnings-as-errors

Conversation

@PixiBixi

@PixiBixi PixiBixi commented Aug 1, 2026

Copy link
Copy Markdown
Owner

Fait suite au DeprecationWarning observé en production sur asyncio.iscoroutinefunction.

Le warning signalé : ce n'est pas notre code

/app/app.py:793: DeprecationWarning: 'asyncio.iscoroutinefunction' is deprecated
  loop.run_in_executor(

L'avertissement pointe notre ligne, mais l'appel déprécié vient de uvloop : uvloop/includes/stdlib.pxi:40 lie asyncio.iscoroutinefunction (l'API publique dépréciée) au lieu de la variante privée coroutines._iscoroutinefunction qu'asyncio utilise lui-même en interne. warnings._deprecated impute la faute à l'appelant, d'où la ligne trompeuse.

Reproduit : avec la boucle asyncio par défaut, aucun avertissement ; avec uvloop.run(), il apparaît. Il ne se manifeste qu'en production parce que uvicorn[standard] embarque uvloop.

Déjà corrigé en amont — issue MagicStack/uvloop#705, fermée le 2026-01-15 — mais la dernière release publiée est v0.22.1 du 2025-10-16, antérieure au correctif. Rien à faire ici : Renovate récupérera la prochaine release et l'automergera (patch).

Ce que ce PR ajoute

Aucun linter statique ne peut attraper ce genre de chose : l'appel déprécié se produit à l'exécution, ici depuis une extension Cython compilée, invisible à l'analyse statique. Le seul garde-fou fiable est de faire échouer la construction sur les warnings.

filterwarnings = ["error::DeprecationWarning"]

Ça couvre les dépréciations dans notre propre code et dans les bibliothèques Python que les tests exercent réellement.

Limite assumée : ça n'aurait pas attrapé celui d'uvloop, puisque les tests tournent sur la boucle asyncio par défaut, pas sous uvloop.

Effet de bord à connaître : une future montée de dépendance introduisant une dépréciation fera rougir la CI et bloquera son automerge. C'est voulu — mieux vaut ça que l'accumulation silencieuse. Quand la dépréciation est hors de notre contrôle, on ajoute une entrée ciblée ignore::DeprecationWarning:<module> plutôt que de retirer la règle.

Vérification

Test canari émettant un DeprecationWarning : échoue bien (FAILED ... - DeprecationWarning). Suite réelle : 240 tests verts, le mode strict ne coûte rien aujourd'hui.

@PixiBixi
PixiBixi merged commit 976588e into master Aug 1, 2026
2 checks passed
@PixiBixi
PixiBixi deleted the chore/warnings-as-errors branch August 1, 2026 21:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant