chore(tests): fail on DeprecationWarning - #50
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fait suite au
DeprecationWarningobservé en production surasyncio.iscoroutinefunction.Le warning signalé : ce n'est pas notre code
L'avertissement pointe notre ligne, mais l'appel déprécié vient de uvloop :
uvloop/includes/stdlib.pxi:40lieasyncio.iscoroutinefunction(l'API publique dépréciée) au lieu de la variante privéecoroutines._iscoroutinefunctionqu'asyncio utilise lui-même en interne.warnings._deprecatedimpute 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 queuvicorn[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.
Ç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.