Canstralian's picture
Update app.py
d418a31 verified
raw
history blame
2.06 kB
import gradio as gr
from huggingface_hub import HfApi
from git import Repo
import uuid
from slugify import slugify
import os
import shutil
def clone(progress=gr.Progress(), profile=None, oauth_token=None, repo_git=None, repo_hf=None, sdk_type=None):
"""Clones and deploys with progress updates."""
try:
progress(0.1, desc="Cloning repository...")
folder = str(uuid.uuid4())
Repo.clone_from(repo_git, folder)
progress(0.4, desc="Creating Hugging Face Space...")
api = HfApi(token=oauth_token.token)
repo_id = f"{profile.username}/{slugify(repo_hf)}"
api.create_repo(repo_id=repo_id, repo_type="space", space_sdk=sdk_type)
progress(0.7, desc="Uploading files...")
with open(os.path.join(folder, "space_config.json"), "w") as f:
import json
json.dump({"sdk": sdk_type}, f)
api.upload_folder(folder_path=folder, repo_id=repo_id, repo_type="space")
shutil.rmtree(folder)
progress(1.0, desc="Deployment complete!")
return f"Deployment successful! [View your space](https://huggingface.co/spaces/{repo_id})"
except Exception as e:
return f"<span style='color:red;'>Error: {e}</span>"
with gr.Blocks() as demo:
gr.LoginButton()
with gr.Row():
with gr.Column():
repo_git = gr.Textbox(label="GitHub Repo", placeholder="https://github.com/...", tooltip="Enter the GitHub repository URL.")
repo_hf = gr.Textbox(label="Space Name", placeholder="my-space", tooltip="Enter a name for your Hugging Face Space.")
sdk_choices = gr.Radio(["gradio", "streamlit", "docker", "static"], label="SDK", tooltip="Select the SDK for your Space.")
with gr.Column():
output = gr.Markdown(label="Output")
progress = gr.Progress()
btn = gr.Button("Bring over!")
btn.click(fn=clone, inputs=[progress, gr.OAuthProfile(), gr.OAuthToken(), repo_git, repo_hf, sdk_choices], outputs=output)
if __name__ == "__main__":
demo.launch(auth_required=True)