Spaces:
Running
Running
Download preflight.py from Hugdrigo/modelguard-observatory: direct link, hf CLI and curl.
- Browser
- Download file 2.32 kB
-
https://huggingface.co/spaces/Hugdrigo/modelguard-observatory/resolve/main/preflight.py
- Command line
-
hf download hf://spaces/Hugdrigo/modelguard-observatory/preflight.py
-
curl -L -o preflight.py https://huggingface.co/spaces/Hugdrigo/modelguard-observatory/resolve/main/preflight.py
2.32 kB
| """Validate root-level Hugging Face Static Space files, manifest, and optional packaging. | |
| Run: python preflight.py [path-to-zip] | |
| """ | |
| from pathlib import Path | |
| import json, re, sys, hashlib, zipfile, yaml | |
| ROOT=Path(__file__).resolve().parent | |
| EXPECTED={'index.html','styles.css','app.js','engine.js','README.md','LICENSE','evaluation_snapshots.json','benchmark_manifest.json','source_modelops_engine.js','train.json','iid_test.json','challenge.json'} | |
| readme=(ROOT/'README.md').read_text(encoding='utf-8') | |
| assert readme.startswith('---\n') | |
| metadata=yaml.safe_load(readme.split('---',2)[1]) | |
| assert metadata['sdk']=='static' | |
| assert metadata['app_file']=='index.html' | |
| assert metadata['license']=='mit' | |
| assert len(metadata['short_description']) <= 60 | |
| assert metadata['colorFrom'] in ('red','yellow','green','blue','indigo','purple','pink','gray') | |
| assert metadata['colorTo'] in ('red','yellow','green','blue','indigo','purple','pink','gray') | |
| assert all((ROOT/n).is_file() for n in EXPECTED) | |
| manifest=json.loads((ROOT/'benchmark_manifest.json').read_text()) | |
| data=(ROOT/'evaluation_snapshots.json').read_bytes() | |
| assert manifest['evaluationSha256']==hashlib.sha256(data).hexdigest() | |
| rows=json.loads(data)['rows'] | |
| assert len(rows)==manifest['predictionRows']==736 | |
| assert manifest['trainCount']==842 and manifest['iidCount']==130 and manifest['challengeCount']==54 | |
| for f,v in manifest['inputSha256'].items():assert hashlib.sha256((ROOT/f).read_bytes()).hexdigest()==v | |
| assert 'src="engine.js"' in (ROOT/'index.html').read_text() | |
| assert 'src="app.js"' in (ROOT/'index.html').read_text() | |
| assert 'script src="http' not in (ROOT/'index.html').read_text() | |
| assert not re.search(r'(api[_-]?key|secret|private[_-]?token)\s*[:=]\s*[\"\']\w+',readme,re.I) | |
| print('PASS metadata, root sources, SHA-256 manifests, and sample counts') | |
| if len(sys.argv)>1: | |
| p=Path(sys.argv[1]);assert p.is_file() | |
| with zipfile.ZipFile(p) as z: | |
| assert z.testzip() is None | |
| names=z.namelist() | |
| assert len(names)==len(set(names)) | |
| assert all('/' not in name and not name.startswith('.') for name in names) | |
| assert len(names)==len(list(ROOT.glob('*'))) | |
| assert EXPECTED.issubset(set(names)) | |
| for name in names:assert z.read(name)==(ROOT/name).read_bytes() | |
| print(f'PASS ZIP integrity: {len(names)} root-level files and byte-for-byte match') | |
| print('PREFLIGHT PASS') | |