from __future__ import annotations import os from pathlib import Path from typing import Mapping from huggingface_hub import HfApi SPACE_NAME = "amongus-openenv" def main() -> None: token = os.environ.get("HF_TOKEN") if not token: raise SystemExit("Set HF_TOKEN in the environment before running this script.") api = HfApi(token=token) repo_id = resolve_repo_id(api=api) api.create_repo( repo_id=repo_id, repo_type="space", space_sdk="gradio", private=False, exist_ok=True, ) api.upload_folder( folder_path=str(Path(__file__).resolve().parents[1]), repo_id=repo_id, repo_type="space", ignore_patterns=[ ".git/*", ".pytest_cache/*", "__pycache__/*", "*.pyc", ], ) print(f"https://huggingface.co/spaces/{repo_id}") def resolve_repo_id( environ: Mapping[str, str] | None = None, api: HfApi | None = None, ) -> str: environ = os.environ if environ is None else environ space_id = environ.get("HF_SPACE_ID") if space_id: if "/" not in space_id: raise SystemExit("HF_SPACE_ID must be in the form username_or_org/space_name.") return space_id username = environ.get("HF_USERNAME") space_name = environ.get("HF_SPACE_NAME", SPACE_NAME) if username: return f"{username}/{space_name}" if api is not None: try: return f"{api.whoami(cache=True)['name']}/{space_name}" except Exception as exc: raise SystemExit( "Could not infer your Hugging Face username without hitting a " "rate-limited endpoint. Set HF_SPACE_ID=username_or_org/space_name " "or HF_USERNAME=username_or_org, then rerun." ) from exc raise SystemExit( "Set HF_SPACE_ID=username_or_org/space_name or HF_USERNAME=username_or_org." ) if __name__ == "__main__": main()