Spaces:
Runtime error
Runtime error
| #!/usr/bin/env python3 | |
| """When B2 is capped: upload ``store_slim_b2.db`` to a Hub **dataset** and point the Space at it. | |
| Uses ``[huggingface].token`` from parser ``secrets.toml``. Sets Space **variables** (not secrets): | |
| ``KINK_HF_DATASET_FILENAME`` (default ``store_slim_bootstrap.db``) so the image still uses | |
| ``KINK_HF_DATASET_REPO`` from the Dockerfile but downloads the smaller LFS object. | |
| After this, run ``python scripts/publish_hf_space.py --verify`` to push code and smoke the app. | |
| Example:: | |
| export HF_SPACE_REPO=ronheichman/kink-discovery | |
| python scripts/deploy_hf_bootstrap_catalog.py | |
| """ | |
| from __future__ import annotations | |
| import argparse | |
| import os | |
| import sys | |
| import tomllib | |
| from pathlib import Path | |
| ROOT = Path(__file__).resolve().parent.parent | |
| DEFAULT_SECRETS = Path(os.environ.get("KINK_PARSER_SECRETS_TOML", Path.home() / "PycharmProjects/parser/secrets.toml")) | |
| def main() -> int: | |
| ap = argparse.ArgumentParser(description=__doc__) | |
| ap.add_argument("--secrets-toml", type=Path, default=DEFAULT_SECRETS) | |
| ap.add_argument( | |
| "--local-path", | |
| type=Path, | |
| default=ROOT / "data" / "store_slim_b2.db", | |
| ) | |
| ap.add_argument("--repo-id", default="ronheichman/kink-catalog-slim") | |
| ap.add_argument("--remote-filename", default="store_slim_bootstrap.db") | |
| ap.add_argument("--skip-hub-upload", action="store_true") | |
| args = ap.parse_args() | |
| repo_id = (os.environ.get("HF_SPACE_REPO") or "").strip() | |
| if not repo_id: | |
| print("deploy_hf_bootstrap_catalog: set HF_SPACE_REPO=owner/slug", file=sys.stderr) | |
| return 1 | |
| local = args.local_path.resolve() | |
| if not local.is_file(): | |
| print(f"deploy_hf_bootstrap_catalog: missing {local}", file=sys.stderr) | |
| return 1 | |
| with args.secrets_toml.open("rb") as f: | |
| data = tomllib.load(f) | |
| token = ((data.get("huggingface") or {}).get("token") or "").strip() | |
| if not token: | |
| print(f"deploy_hf_bootstrap_catalog: missing [huggingface].token in {args.secrets_toml}", file=sys.stderr) | |
| return 1 | |
| from huggingface_hub import HfApi | |
| api = HfApi(token=token) | |
| if not args.skip_hub_upload: | |
| api.create_repo(args.repo_id, repo_type="dataset", exist_ok=True) | |
| print( | |
| f"deploy_hf_bootstrap_catalog: uploading {local} → {args.repo_id}/{args.remote_filename} …", | |
| file=sys.stderr, | |
| ) | |
| api.upload_file( | |
| path_or_fileobj=str(local), | |
| path_in_repo=args.remote_filename, | |
| repo_id=args.repo_id, | |
| repo_type="dataset", | |
| ) | |
| api.add_space_variable( | |
| repo_id, | |
| "KINK_HF_DATASET_FILENAME", | |
| args.remote_filename, | |
| description="Bootstrap SQLite filename in kink-catalog-slim (slim ~280MiB)", | |
| token=token, | |
| ) | |
| api.add_space_variable( | |
| repo_id, | |
| "KINK_HF_DATASET_REPO", | |
| args.repo_id, | |
| description="Hub dataset for catalog (matches Dockerfile default)", | |
| token=token, | |
| ) | |
| print("deploy_hf_bootstrap_catalog: Space variables updated.", file=sys.stderr) | |
| print( | |
| f" HF_TOKEN=*** HF_SPACE_REPO={repo_id} python scripts/publish_hf_space.py --verify", | |
| file=sys.stderr, | |
| ) | |
| return 0 | |
| if __name__ == "__main__": | |
| raise SystemExit(main()) | |