25 خطوط
1.4 KiB
Python
25 خطوط
1.4 KiB
Python
#!/usr/bin/env python3
|
|
"""Audit a directory of real inputs without copying design files into source."""
|
|
import argparse
|
|
import hashlib
|
|
import json
|
|
import sys
|
|
from pathlib import Path
|
|
sys.path.insert(0,str(Path(__file__).resolve().parents[1]/'backend'))
|
|
from app.parser.schdoc_parser import parse_schdoc
|
|
from app.render import svg_document
|
|
p=argparse.ArgumentParser();p.add_argument('directory',type=Path);p.add_argument('--output',type=Path,default=Path('validation-output/corpus.json'));a=p.parse_args()
|
|
results=[]
|
|
for path in sorted(a.directory.glob('*')):
|
|
if path.suffix.lower()!='.schdoc': continue
|
|
raw=path.read_bytes()
|
|
result={'filename':path.name,'sha256':hashlib.sha256(raw).hexdigest()}
|
|
try:
|
|
doc=parse_schdoc(raw,path.name,'audit'); svg=svg_document(doc)
|
|
result.update(status='parsed',record_count=doc.metadata['record_count'],primitive_count=len(doc.primitives),component_count=len(doc.components),svg_bytes=len(svg),diagnostics=[d.model_dump() for d in doc.diagnostics])
|
|
except Exception as e: result.update(status='failed',error=str(e))
|
|
results.append(result)
|
|
a.output.parent.mkdir(parents=True,exist_ok=True);a.output.write_text(json.dumps(results,indent=2))
|
|
print(json.dumps({'files':len(results),'parsed':sum(r['status']=='parsed' for r in results),'failed':sum(r['status']=='failed' for r in results),'output':str(a.output)}))
|
|
sys.exit(1 if not results or any(r['status']=='failed' for r in results) else 0)
|