Spaces:
Sleeping
Sleeping
| #!/usr/bin/env python3 | |
| """Prove ``ensure_store_db`` can fill ``KINK_STORE_PATH`` from B2 S3 (same path as HF). | |
| Uses parser ``secrets.toml`` ``[b2]`` and default object key | |
| ``kink/catalog/store_slim_bootstrap.db`` (override with ``--key``). | |
| Example:: | |
| python scripts/prove_b2_bootstrap_local.py | |
| python scripts/prove_b2_bootstrap_local.py --key kink/catalog/store_slim.db | |
| """ | |
| from __future__ import annotations | |
| import argparse | |
| import os | |
| import sys | |
| from pathlib import Path | |
| from backend.b2_toml import load_b2_section, resolve_b2_config_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, help="Fallback TOML with [b2]") | |
| ap.add_argument("--b2-secrets-toml", type=Path, default=None, help="TOML with only [b2] (overrides env and --secrets-toml)") | |
| ap.add_argument("--key", default="kink/catalog/store_slim_bootstrap.db") | |
| ap.add_argument( | |
| "--dest", | |
| type=Path, | |
| default=Path("/tmp/kink_b2_bootstrap_proof.db"), | |
| help="Fresh path for downloaded DB", | |
| ) | |
| args = ap.parse_args() | |
| b2_path = resolve_b2_config_path(cli_b2=args.b2_secrets_toml, cli_fallback=args.secrets_toml) | |
| if not b2_path.is_file(): | |
| print(f"prove_b2_bootstrap_local: B2 secrets TOML not found: {b2_path}", file=sys.stderr) | |
| return 1 | |
| try: | |
| b2 = load_b2_section(b2_path) | |
| except SystemExit as e: | |
| print(f"prove_b2_bootstrap_local: {e}", file=sys.stderr) | |
| return 1 | |
| dest = args.dest.resolve() | |
| if dest.exists(): | |
| dest.unlink() | |
| os.environ["B2_KEY_ID"] = str(b2["key_id"]).strip() | |
| os.environ["B2_APPLICATION_KEY"] = str(b2["application_key"]).strip() | |
| os.environ["B2_BUCKET"] = str(b2["bucket_name"]).strip() | |
| os.environ["B2_REGION"] = str(b2["region"]).strip() | |
| os.environ["KINK_B2_OBJECT_KEY"] = args.key.lstrip("/") | |
| os.environ.pop("KINK_CATALOG_URL", None) | |
| os.environ["KINK_STORE_PATH"] = str(dest) | |
| os.environ["KINK_HF_REQUIRE_FULL_CATALOG"] = "0" | |
| sys.path.insert(0, str(ROOT)) | |
| from backend.hf_bootstrap import ensure_store_db | |
| print(f"prove_b2_bootstrap_local: downloading B2 → {dest} …", flush=True) | |
| out = ensure_store_db(dest) | |
| assert out.resolve() == dest.resolve() | |
| import sqlite3 | |
| conn = sqlite3.connect(str(dest)) | |
| try: | |
| nk = conn.execute("SELECT COUNT(*) FROM kink").fetchone()[0] | |
| np = conn.execute( | |
| "SELECT COUNT(*) FROM kinkcontenttype WHERE content_kind='play'" | |
| ).fetchone()[0] | |
| finally: | |
| conn.close() | |
| print(f"prove_b2_bootstrap_local: OK — {nk} kinks, {np} plays in {dest}", flush=True) | |
| return 0 | |
| if __name__ == "__main__": | |
| raise SystemExit(main()) | |