From e4bc9166beaa9cc1c1e6681da3605f883968d042 Mon Sep 17 00:00:00 2001 From: Domi31tls Date: Thu, 2 Jul 2026 11:23:51 +0200 Subject: [PATCH] =?UTF-8?q?test(build):=20=C3=A9chec=20bruyant=20si=20bloc?= =?UTF-8?q?=20hiddenimports=20introuvable=20(revue=20Task=202)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - _hiddenimport_strings assert désormais si le bloc hiddenimports=[...] est absent (renommage/refonte de spec) au lieu de retourner [] silencieusement, ce qui faisait passer le test à vide. - Docstring corrigée : la regex s'arrête au PREMIER `]` où qu'il soit (pas « ligne seule ») — limitation réelle documentée. Co-Authored-By: Claude Fable 5 --- tests/unit/test_build_specs_torch_free.py | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/tests/unit/test_build_specs_torch_free.py b/tests/unit/test_build_specs_torch_free.py index db144e3..cf71983 100644 --- a/tests/unit/test_build_specs_torch_free.py +++ b/tests/unit/test_build_specs_torch_free.py @@ -22,18 +22,21 @@ FORBIDDEN_HIDDEN = ("optimum", "torch", "torchvision", "doctr") REQUIRED_EXCLUDES = ("torch", "torchvision", "optimum", "doctr") -def _hiddenimport_strings(text): +def _hiddenimport_strings(text, spec_name): """Retourne les chaînes littérales présentes dans la section hiddenimports=[...]. - On extrait uniquement la portion du texte entre `hiddenimports = [` et le `]` - de fermeture correspondant (premier `]` sur une ligne seule), afin d'éviter - les faux positifs générés par le bloc EXCLUDED_TORCH_STACK lui-même qui - contient légitimement "torch", "optimum", etc. comme valeurs d'exclusion. + On extrait la portion entre `hiddenimports = [` et le PREMIER `]` rencontré + où qu'il soit (`[^\\]]*` ne gère pas l'imbrication : un `]` dans un + commentaire au sein de la liste tronquerait le bloc — acceptable ici, les + specs n'en contiennent pas). Cette restriction évite les faux positifs du + bloc EXCLUDED_TORCH_STACK qui contient légitimement "torch", "optimum", etc. + + Garde-fou : si le bloc hiddenimports est introuvable (renommage, refonte de + la spec), on échoue BRUYAMMENT au lieu de retourner [] — sinon le test + passerait à vide sans plus rien vérifier. """ - # Cherche le bloc hiddenimports = [ ... ] match = re.search(r"hiddenimports\s*=\s*\[([^\]]*)\]", text, re.DOTALL) - if not match: - return [] + assert match is not None, f"bloc hiddenimports introuvable dans {spec_name}" block = match.group(1) return re.findall(r"[\"']([A-Za-z0-9_.]+)[\"']", block) @@ -42,7 +45,7 @@ def _hiddenimport_strings(text): def test_spec_sans_hiddenimport_torch_optimum_doctr(spec_path): text = spec_path.read_text(encoding="utf-8") hits = [ - s for s in _hiddenimport_strings(text) + s for s in _hiddenimport_strings(text, spec_path.name) if s.split(".")[0] in FORBIDDEN_HIDDEN ] assert hits == [], f"{spec_path.name} référence encore : {hits}"