gradio/scripts/upload_demo_to_space.py

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

79 lines
2.8 KiB
Python
Raw Normal View History

import argparse
import pathlib
import shutil
import tempfile
import textwrap
from typing import Optional
import huggingface_hub
def upload_demo_to_space(
demo_name: str, space_id: str, hf_token: str, gradio_version: Optional[str]
):
"""Upload a demo in the demo directory to a huggingface space.
Args:
demo_name: The name of the demo to upload.
space_id: The id of the space to upload the demo to.
hf_token: HF api token. Need to have permission to write to space_id for this to work.
gradio_version: If not None, will set the gradio version in the created space to the given version.
"""
with tempfile.TemporaryDirectory() as tmpdir:
demo_path = pathlib.Path(pathlib.Path().absolute(), f"demo/{demo_name}")
shutil.copytree(demo_path, tmpdir, dirs_exist_ok=True)
app_file = pathlib.Path(tmpdir, "run.py")
# Rename the app file to be app.py
app_file.rename(app_file.with_stem("app"))
if gradio_version:
readme = pathlib.Path(tmpdir, "README.md")
readme_content = f"""
---
title: {space_id.split("/")[-1]}
emoji: 💩
colorFrom: indigo
colorTo: indigo
sdk: gradio
sdk_version: {gradio_version}
app_file: app.py
pinned: false
---
"""
readme.open("w").write(textwrap.dedent(readme_content))
api = huggingface_hub.HfApi()
huggingface_hub.create_repo(
space_id,
space_sdk="gradio",
repo_type="space",
token=hf_token,
exist_ok=True,
)
api.upload_folder(
token=hf_token,
repo_id=space_id,
repo_type="space",
folder_path=tmpdir,
path_in_repo="",
)
return f"https://huggingface.co/spaces/{space_id}"
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Upload a demo to a space")
parser.add_argument("demo_name", type=str, help="Name of demo to upload")
parser.add_argument(
"space_id", type=str, help="Name of the space to upload the demo to"
)
parser.add_argument("hf_token", type=str, help="HF API token")
parser.add_argument(
"--gradio-version",
type=str,
help="If not None, will set the gradio version in the created space to the given version.",
)
args = parser.parse_args()
new_space = upload_demo_to_space(
args.demo_name, args.space_id, args.hf_token, args.gradio_version
)
print(new_space)