30 lines
1.1 KiB
Python
30 lines
1.1 KiB
Python
#!/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)
|