wuhp commited on
Commit
79ac7b6
·
verified ·
1 Parent(s): cd1467e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +28 -23
app.py CHANGED
@@ -12,33 +12,37 @@ def list_private_models(
12
  oauth_token: gr.OAuthToken | None
13
  ) -> str:
14
  """Demo: list user’s private/public models."""
15
- if oauth_token is None or profile is None:
16
  return "Please log in to see your models."
17
  models = [
18
  f"{model.id} ({'private' if model.private else 'public'})"
19
  for model in list_models(author=profile.username, token=oauth_token.token)
20
  ]
21
- if not models:
22
- return "No models found."
23
- return "Models:\n\n" + "\n - ".join(models)
24
 
25
  def create_space(
26
  repo_name: str,
 
 
27
  oauth_token: gr.OAuthToken | None
28
  ) -> tuple[str, str, str]:
29
- """Create (or get) a Hugging Face Space and return its URL/logs/iframe."""
30
- if oauth_token is None:
 
 
 
31
  return "", "⚠️ Please log in first.", "<p>No Space created yet.</p>"
32
- username = oauth_token.user_info["username"]
33
- repo_id = f"{username}/{repo_name}"
34
  create_repo(
35
  repo_id=repo_id,
36
  token=oauth_token.token,
37
  exist_ok=True,
38
- repo_type="space"
 
39
  )
40
  url = f"https://huggingface.co/spaces/{repo_id}"
41
- logmsg = f"✅ Space ready: {url}"
42
  iframe = f'<iframe src="{url}" width="100%" height="500px"></iframe>'
43
  return repo_id, logmsg, iframe
44
 
@@ -46,40 +50,41 @@ with gr.Blocks(title="HF OAuth + Space Creator") as demo:
46
  gr.Markdown(
47
  "## Sign in with Hugging Face + Create a Space\n\n"
48
  "1. Click **Sign in**.\n"
49
- "2. Enter a name and **Create Space**.\n\n"
50
  "---"
51
  )
52
 
53
  # — Login UI —
54
- login_btn = gr.LoginButton(variant="huggingface", size="lg")
55
- status_md = gr.Markdown("*Not logged in.*")
56
- models_md = gr.Markdown()
57
-
58
- # Status & model list on load & after login/logout
59
- demo.load(show_profile, inputs=None, outputs=status_md)
60
- login_btn.click(show_profile, inputs=None, outputs=status_md)
61
 
62
- demo.load(list_private_models, inputs=None, outputs=models_md)
63
- login_btn.click(list_private_models, inputs=None, outputs=models_md)
 
 
64
 
65
  # — Create Space UI —
66
  repo_name = gr.Textbox(label="New Space name", placeholder="my-space-name")
 
 
 
 
 
67
  create_btn = gr.Button("Create Space", interactive=False)
68
  session_id = gr.Textbox(visible=False)
69
  logs = gr.Textbox(label="Logs", interactive=False, lines=3)
70
  preview_iframe = gr.HTML("<p>No Space created yet.</p>")
71
 
72
- # Enable the Create button once logged in
73
  def enable_create(profile: gr.OAuthProfile | None):
74
  return gr.update(interactive=profile is not None)
75
 
76
  demo.load(enable_create, inputs=None, outputs=create_btn)
77
  login_btn.click(enable_create, inputs=None, outputs=create_btn)
78
 
79
- # Wire up create_space; Gradio injects the token for you
80
  create_btn.click(
81
  fn=create_space,
82
- inputs=[repo_name],
83
  outputs=[session_id, logs, preview_iframe]
84
  )
85
 
 
12
  oauth_token: gr.OAuthToken | None
13
  ) -> str:
14
  """Demo: list user’s private/public models."""
15
+ if profile is None or oauth_token is None:
16
  return "Please log in to see your models."
17
  models = [
18
  f"{model.id} ({'private' if model.private else 'public'})"
19
  for model in list_models(author=profile.username, token=oauth_token.token)
20
  ]
21
+ return "No models found." if not models \
22
+ else "Models:\n\n" + "\n - ".join(models)
 
23
 
24
  def create_space(
25
  repo_name: str,
26
+ sdk: str,
27
+ profile: gr.OAuthProfile | None,
28
  oauth_token: gr.OAuthToken | None
29
  ) -> tuple[str, str, str]:
30
+ """
31
+ Create (or get) a Hugging Face Space with the chosen SDK template,
32
+ returning (repo_id, logs, iframe).
33
+ """
34
+ if profile is None or oauth_token is None:
35
  return "", "⚠️ Please log in first.", "<p>No Space created yet.</p>"
36
+ repo_id = f"{profile.username}/{repo_name}"
 
37
  create_repo(
38
  repo_id=repo_id,
39
  token=oauth_token.token,
40
  exist_ok=True,
41
+ repo_type="space",
42
+ space_sdk=sdk
43
  )
44
  url = f"https://huggingface.co/spaces/{repo_id}"
45
+ logmsg = f"✅ Space ready: {url} (SDK: {sdk})"
46
  iframe = f'<iframe src="{url}" width="100%" height="500px"></iframe>'
47
  return repo_id, logmsg, iframe
48
 
 
50
  gr.Markdown(
51
  "## Sign in with Hugging Face + Create a Space\n\n"
52
  "1. Click **Sign in**.\n"
53
+ "2. Pick a template, enter a name, and **Create Space**.\n\n"
54
  "---"
55
  )
56
 
57
  # — Login UI —
58
+ login_btn = gr.LoginButton(variant="huggingface", size="lg")
59
+ status_md = gr.Markdown("*Not logged in.*")
60
+ models_md = gr.Markdown()
 
 
 
 
61
 
62
+ demo.load(show_profile, inputs=None, outputs=status_md)
63
+ login_btn.click(show_profile, inputs=None, outputs=status_md)
64
+ demo.load(list_private_models, inputs=None, outputs=models_md)
65
+ login_btn.click(list_private_models,inputs=None, outputs=models_md)
66
 
67
  # — Create Space UI —
68
  repo_name = gr.Textbox(label="New Space name", placeholder="my-space-name")
69
+ sdk_selector = gr.Radio(
70
+ choices=["gradio", "streamlit"],
71
+ value="gradio",
72
+ label="Space template (SDK)"
73
+ )
74
  create_btn = gr.Button("Create Space", interactive=False)
75
  session_id = gr.Textbox(visible=False)
76
  logs = gr.Textbox(label="Logs", interactive=False, lines=3)
77
  preview_iframe = gr.HTML("<p>No Space created yet.</p>")
78
 
 
79
  def enable_create(profile: gr.OAuthProfile | None):
80
  return gr.update(interactive=profile is not None)
81
 
82
  demo.load(enable_create, inputs=None, outputs=create_btn)
83
  login_btn.click(enable_create, inputs=None, outputs=create_btn)
84
 
 
85
  create_btn.click(
86
  fn=create_space,
87
+ inputs=[repo_name, sdk_selector],
88
  outputs=[session_id, logs, preview_iframe]
89
  )
90