#!/usr/bin/env python3 """Package an independently maintained adapter without Console internals.""" import argparse import json from pathlib import Path from zipfile import ZIP_DEFLATED, ZipFile parser = argparse.ArgumentParser() parser.add_argument("directory", type=Path) parser.add_argument("output", type=Path) args = parser.parse_args() root = args.directory.resolve() manifest = json.loads((root / "manifest.json").read_text()) entry = (root / manifest["entrypoint"]).resolve() if not entry.is_relative_to(root) or not entry.is_file(): parser.error("invalid adapter entrypoint") with ZipFile(args.output, "w", ZIP_DEFLATED) as archive: for path in sorted(root.rglob("*")): if path.is_symlink(): parser.error("symlinks are not supported") if ( path.is_file() and path.resolve() != args.output.resolve() and not any(part in (".git", "__pycache__") for part in path.parts) and path.suffix != ".pyc" ): archive.write(path, path.relative_to(root)) print("Adapter package created:", args.output)