import tomllib from pathlib import Path from zipfile import ZIP_DEFLATED, ZipFile PROJECT_ROOT = Path(__file__).resolve().parent SOURCE_DIR = PROJECT_ROOT / "src" / "snapform" DIST_DIR = PROJECT_ROOT / "dist" def build_extension(): manifest = tomllib.loads( (SOURCE_DIR / "blender_manifest.toml").read_text(encoding="utf-8") ) blender_version = manifest["blender_version_min"].split(".") blender_tag = f"b{blender_version[0]}{blender_version[1]}" output_path = DIST_DIR / ( f"{manifest['name']}.v{manifest['version']}.{blender_tag}.zip" ) DIST_DIR.mkdir(exist_ok=True) with ZipFile(output_path, "w", ZIP_DEFLATED) as archive: for source_path in sorted(SOURCE_DIR.rglob("*")): if not source_path.is_file(): continue if "__pycache__" in source_path.parts: continue archive.write(source_path, source_path.relative_to(SOURCE_DIR)) return output_path if __name__ == "__main__": extension_path = build_extension() size_mib = extension_path.stat().st_size / (1024 * 1024) print(f"Built {extension_path} ({size_mib:.2f} MiB)")