| """Deploy this project to a Hugging Face Space with one command.""" |
|
|
| from __future__ import annotations |
|
|
| import argparse |
| import os |
| from pathlib import Path |
|
|
| from huggingface_hub import HfApi |
|
|
| ROOT = Path(__file__).resolve().parent |
| IGNORE_PATTERNS = [ |
| "__pycache__/**", |
| "*.pyc", |
| ".gradio/**", |
| "assets/models/**", |
| "assets/cache/**", |
| "assets/cloudflared.exe", |
| "*.log", |
| ] |
|
|
|
|
| def resolve_token(explicit_token: str | None) -> str: |
| token = explicit_token or os.environ.get("HF_TOKEN") or os.environ.get("HUGGINGFACEHUB_API_TOKEN") |
| if not token: |
| raise SystemExit( |
| "Missing Hugging Face token. Pass --token or set HF_TOKEN / HUGGINGFACEHUB_API_TOKEN." |
| ) |
| return token |
|
|
|
|
| def main() -> None: |
| parser = argparse.ArgumentParser(description="Create or update a Hugging Face Space.") |
| parser.add_argument( |
| "--repo-id", |
| required=True, |
| help="Space repo id, e.g. username/detection-segmentation-studio", |
| ) |
| parser.add_argument("--token", help="Hugging Face write token. Optional if HF_TOKEN is set.") |
| parser.add_argument("--private", action="store_true", help="Create the Space as private.") |
| parser.add_argument( |
| "--commit-message", |
| default="Deploy Detection + Segmentation Studio", |
| help="Commit message for the uploaded Space files.", |
| ) |
| args = parser.parse_args() |
|
|
| token = resolve_token(args.token) |
| api = HfApi(token=token) |
| api.create_repo( |
| repo_id=args.repo_id, |
| repo_type="space", |
| space_sdk="gradio", |
| private=args.private, |
| exist_ok=True, |
| ) |
| api.upload_folder( |
| repo_id=args.repo_id, |
| repo_type="space", |
| folder_path=ROOT, |
| commit_message=args.commit_message, |
| ignore_patterns=IGNORE_PATTERNS, |
| ) |
| print(f"Deployed: https://huggingface.co/spaces/{args.repo_id}") |
|
|
|
|
| if __name__ == "__main__": |
| main() |
|
|