test(build): échec bruyant si bloc hiddenimports introuvable (revue Task 2)
- _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 <noreply@anthropic.com>
This commit is contained in:
@@ -22,18 +22,21 @@ FORBIDDEN_HIDDEN = ("optimum", "torch", "torchvision", "doctr")
|
|||||||
REQUIRED_EXCLUDES = ("torch", "torchvision", "optimum", "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=[...].
|
"""Retourne les chaînes littérales présentes dans la section hiddenimports=[...].
|
||||||
|
|
||||||
On extrait uniquement la portion du texte entre `hiddenimports = [` et le `]`
|
On extrait la portion entre `hiddenimports = [` et le PREMIER `]` rencontré
|
||||||
de fermeture correspondant (premier `]` sur une ligne seule), afin d'éviter
|
où qu'il soit (`[^\\]]*` ne gère pas l'imbrication : un `]` dans un
|
||||||
les faux positifs générés par le bloc EXCLUDED_TORCH_STACK lui-même qui
|
commentaire au sein de la liste tronquerait le bloc — acceptable ici, les
|
||||||
contient légitimement "torch", "optimum", etc. comme valeurs d'exclusion.
|
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)
|
match = re.search(r"hiddenimports\s*=\s*\[([^\]]*)\]", text, re.DOTALL)
|
||||||
if not match:
|
assert match is not None, f"bloc hiddenimports introuvable dans {spec_name}"
|
||||||
return []
|
|
||||||
block = match.group(1)
|
block = match.group(1)
|
||||||
return re.findall(r"[\"']([A-Za-z0-9_.]+)[\"']", block)
|
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):
|
def test_spec_sans_hiddenimport_torch_optimum_doctr(spec_path):
|
||||||
text = spec_path.read_text(encoding="utf-8")
|
text = spec_path.read_text(encoding="utf-8")
|
||||||
hits = [
|
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
|
if s.split(".")[0] in FORBIDDEN_HIDDEN
|
||||||
]
|
]
|
||||||
assert hits == [], f"{spec_path.name} référence encore : {hits}"
|
assert hits == [], f"{spec_path.name} référence encore : {hits}"
|
||||||
|
|||||||
Reference in New Issue
Block a user