Update deploy.py
Browse files
deploy.py
CHANGED
@@ -11,7 +11,7 @@ import gradio as gr
|
|
11 |
from huggingface_hub import HfApi, duplicate_space
|
12 |
|
13 |
# ------------------------------------------------------------------
|
14 |
-
# Utilities for live
|
15 |
# ------------------------------------------------------------------
|
16 |
|
17 |
def send_to_sandbox(code: str) -> str:
|
@@ -30,9 +30,17 @@ def send_to_sandbox(code: str) -> str:
|
|
30 |
)
|
31 |
|
32 |
def demo_card_click(e: gr.EventData) -> str:
|
33 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
34 |
from constants import DEMO_LIST
|
35 |
-
|
|
|
36 |
return DEMO_LIST[idx]["description"]
|
37 |
|
38 |
# ------------------------------------------------------------------
|
@@ -54,8 +62,15 @@ def deploy_to_spaces(code: str) -> None:
|
|
54 |
if not code.strip():
|
55 |
return
|
56 |
app_py = wrap_html_in_gradio_app(code)
|
57 |
-
params = urllib.parse.urlencode({
|
58 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
59 |
url = f"https://huggingface.co/new-space?{params}&{files_params}"
|
60 |
webbrowser.open_new_tab(url)
|
61 |
|
@@ -66,8 +81,15 @@ def deploy_to_spaces_static(code: str) -> None:
|
|
66 |
if not code.strip():
|
67 |
return
|
68 |
html = wrap_html_in_static_app(code)
|
69 |
-
params = urllib.parse.urlencode({
|
70 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
71 |
url = f"https://huggingface.co/new-space?{params}&{files_params}"
|
72 |
webbrowser.open_new_tab(url)
|
73 |
|
@@ -77,16 +99,15 @@ def deploy_to_spaces_static(code: str) -> None:
|
|
77 |
|
78 |
def check_hf_space_url(url: str):
|
79 |
import re
|
80 |
-
pattern = re.compile(r'^(?:https?://)?(?:huggingface
|
81 |
m = pattern.match(url.strip())
|
82 |
-
|
|
|
|
|
83 |
|
84 |
def fetch_hf_space_content(username: str, project: str) -> str:
|
85 |
api = HfApi()
|
86 |
-
|
87 |
-
sdk = info.sdk
|
88 |
-
main_file = "index.html" if sdk == "static" else "app.py"
|
89 |
-
path = api.hf_hub_download(repo_id=f"{username}/{project}", filename=main_file, repo_type="space")
|
90 |
with open(path, "r", encoding="utf-8") as f:
|
91 |
return f.read()
|
92 |
|
@@ -100,22 +121,18 @@ def load_project_from_url(url: str):
|
|
100 |
except Exception as e:
|
101 |
return f"Error fetching project: {e}", ""
|
102 |
|
|
|
|
|
|
|
|
|
103 |
def deploy_to_user_space(code, space_name, sdk_choice, profile: Optional[gr.OAuthProfile] = None, token: Optional[gr.OAuthToken] = None):
|
104 |
if not profile or not token or not token.token or token.token.startswith("hf_"):
|
105 |
return gr.update(value="Please log in with a valid Hugging Face write token.", visible=True)
|
106 |
-
|
107 |
api = HfApi(token=token.token)
|
108 |
-
repo_id =
|
109 |
-
|
110 |
-
|
111 |
-
if "/" not in space_name and sdk != "docker":
|
112 |
-
api.create_repo(repo_id=repo_id, repo_type="space", space_sdk=sdk, exist_ok=True)
|
113 |
-
|
114 |
-
filename = "index.html" if sdk == "static" else "app.py"
|
115 |
-
with tempfile.NamedTemporaryFile("w", suffix=f".{filename.split('.')[-1]}", delete=False) as f:
|
116 |
f.write(code)
|
117 |
-
|
118 |
-
|
119 |
-
os.unlink(path)
|
120 |
-
|
121 |
return gr.update(value=f"✅ Deployed to https://huggingface.co/spaces/{repo_id}", visible=True)
|
|
|
11 |
from huggingface_hub import HfApi, duplicate_space
|
12 |
|
13 |
# ------------------------------------------------------------------
|
14 |
+
# Utilities for live-preview sandbox in the Gradio UI
|
15 |
# ------------------------------------------------------------------
|
16 |
|
17 |
def send_to_sandbox(code: str) -> str:
|
|
|
30 |
)
|
31 |
|
32 |
def demo_card_click(e: gr.EventData) -> str:
|
33 |
+
try:
|
34 |
+
idx = (
|
35 |
+
e._data.get("index")
|
36 |
+
or e._data.get("component", {}).get("index")
|
37 |
+
or e._data.get("target", {}).get("index")
|
38 |
+
)
|
39 |
+
except Exception:
|
40 |
+
idx = 0
|
41 |
from constants import DEMO_LIST
|
42 |
+
if not (0 <= idx < len(DEMO_LIST)):
|
43 |
+
idx = 0
|
44 |
return DEMO_LIST[idx]["description"]
|
45 |
|
46 |
# ------------------------------------------------------------------
|
|
|
62 |
if not code.strip():
|
63 |
return
|
64 |
app_py = wrap_html_in_gradio_app(code)
|
65 |
+
params = urllib.parse.urlencode({
|
66 |
+
"name": "new-space",
|
67 |
+
"sdk": "gradio"
|
68 |
+
})
|
69 |
+
files = {
|
70 |
+
"files[0][path]": "app.py",
|
71 |
+
"files[0][content]": app_py
|
72 |
+
}
|
73 |
+
files_params = urllib.parse.urlencode(files)
|
74 |
url = f"https://huggingface.co/new-space?{params}&{files_params}"
|
75 |
webbrowser.open_new_tab(url)
|
76 |
|
|
|
81 |
if not code.strip():
|
82 |
return
|
83 |
html = wrap_html_in_static_app(code)
|
84 |
+
params = urllib.parse.urlencode({
|
85 |
+
"name": "new-space",
|
86 |
+
"sdk": "static"
|
87 |
+
})
|
88 |
+
files = {
|
89 |
+
"files[0][path]": "index.html",
|
90 |
+
"files[0][content]": html
|
91 |
+
}
|
92 |
+
files_params = urllib.parse.urlencode(files)
|
93 |
url = f"https://huggingface.co/new-space?{params}&{files_params}"
|
94 |
webbrowser.open_new_tab(url)
|
95 |
|
|
|
99 |
|
100 |
def check_hf_space_url(url: str):
|
101 |
import re
|
102 |
+
pattern = re.compile(r'^(?:https?://)?(?:huggingface\.co|hf\.co)/spaces/([\w-]+)/([\w-]+)$', re.IGNORECASE)
|
103 |
m = pattern.match(url.strip())
|
104 |
+
if not m:
|
105 |
+
return False, None, None
|
106 |
+
return True, m.group(1), m.group(2)
|
107 |
|
108 |
def fetch_hf_space_content(username: str, project: str) -> str:
|
109 |
api = HfApi()
|
110 |
+
path = api.hf_hub_download(repo_id=f"{username}/{project}", filename="app.py", repo_type="space")
|
|
|
|
|
|
|
111 |
with open(path, "r", encoding="utf-8") as f:
|
112 |
return f.read()
|
113 |
|
|
|
121 |
except Exception as e:
|
122 |
return f"Error fetching project: {e}", ""
|
123 |
|
124 |
+
def handle_load_project(url: str):
|
125 |
+
status_message, content = load_project_from_url(url)
|
126 |
+
return status_message, content, "", url, [], []
|
127 |
+
|
128 |
def deploy_to_user_space(code, space_name, sdk_choice, profile: Optional[gr.OAuthProfile] = None, token: Optional[gr.OAuthToken] = None):
|
129 |
if not profile or not token or not token.token or token.token.startswith("hf_"):
|
130 |
return gr.update(value="Please log in with a valid Hugging Face write token.", visible=True)
|
|
|
131 |
api = HfApi(token=token.token)
|
132 |
+
repo_id = f"{profile.username}/{space_name.strip()}"
|
133 |
+
api.create_repo(repo_id=repo_id, repo_type="space", space_sdk=sdk_choice, exist_ok=True)
|
134 |
+
with tempfile.NamedTemporaryFile("w", delete=False) as f:
|
|
|
|
|
|
|
|
|
|
|
135 |
f.write(code)
|
136 |
+
api.upload_file(path_or_fileobj=f.name, path_in_repo="app.py", repo_id=repo_id, repo_type="space")
|
137 |
+
os.unlink(f.name)
|
|
|
|
|
138 |
return gr.update(value=f"✅ Deployed to https://huggingface.co/spaces/{repo_id}", visible=True)
|