Files
Sanctification/artifacts/layers/library.py

28 lines
1.2 KiB
Python

"""Resolve pinned shared frame/backing assets without copying them into a card proof."""
from pathlib import Path
import hashlib, json
ROOT = Path(__file__).resolve().parent
def digest(path):
return hashlib.sha256(Path(path).read_bytes()).hexdigest()
def load_tier(tier, version=None):
index = json.loads((ROOT / 'manifest.json').read_text())
entry = index['tiers'][tier]
version = version or entry['selectedVersion']
if version not in entry['versions']:
raise ValueError(f'Unknown tier revision: {tier}/{version}')
directory = ROOT / tier / version
manifest = json.loads((directory / 'manifest.json').read_text())
for relative, record in manifest['files'].items():
path = directory / relative
if not path.is_file() or digest(path) != record['sha256']:
raise ValueError(f'Shared layer missing or changed: {tier}/{version}/{relative}')
return {
'tier': tier, 'version': version, 'directory': directory,
'manifestSHA256': digest(directory / 'manifest.json'),
'layout': json.loads((directory / 'layout.json').read_text()),
'reviewStatus': manifest['reviewStatus'],
'assets': {name: directory / relative for name, relative in manifest['assets'].items()},
}