gradio/scripts/upload_demo_to_space.py
Freddy Boulton 21f9da9380
Automatically deploy kitchen sink to spaces on release (#1994)
* Add step to deploy to spaces on release

* Import package not modules

* Lint

* Add comment on slack
2022-08-12 11:51:36 -04:00

79 lines
2.8 KiB
Python

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)