wuhp commited on
Commit
72cc398
·
verified ·
1 Parent(s): bacaaa0

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +37 -36
app.py CHANGED
@@ -27,7 +27,7 @@ def enable_create(
27
  profile: gr.OAuthProfile | None,
28
  oauth_token: gr.OAuthToken | None
29
  ):
30
- """Enable Create Space once logged in."""
31
  return gr.update(interactive=profile is not None)
32
 
33
  def enable_repo_actions(
@@ -35,7 +35,7 @@ def enable_repo_actions(
35
  profile: gr.OAuthProfile | None,
36
  oauth_token: gr.OAuthToken | None
37
  ):
38
- """Enable Upload & Get Logs once space exists and logged in."""
39
  return gr.update(interactive=bool(repo_id and profile and oauth_token))
40
 
41
  # — CORE ACTIONS —
@@ -46,7 +46,7 @@ def create_space(
46
  profile: gr.OAuthProfile | None,
47
  oauth_token: gr.OAuthToken | None
48
  ) -> tuple[str, str, str]:
49
- if profile is None or oauth_token is None:
50
  return "", "⚠️ Please log in first.", "<p>No Space created yet.</p>"
51
  repo_id = f"{profile.username}/{repo_name}"
52
  create_repo(
@@ -62,17 +62,17 @@ def create_space(
62
  return repo_id, logmsg, iframe
63
 
64
  def upload_file_to_space(
65
- file, # Gradio passes a Python tempfile-like object
66
  path_in_repo: str,
67
  repo_id: str,
68
  profile: gr.OAuthProfile | None,
69
  oauth_token: gr.OAuthToken | None
70
  ) -> str:
71
- if profile is None or oauth_token is None:
72
  return "⚠️ Please log in first."
73
  if not repo_id:
74
  return "⚠️ Please create a Space first."
75
- if file is None:
76
  return "⚠️ No file selected."
77
  upload_file(
78
  path_or_fileobj=file.name,
@@ -88,15 +88,15 @@ def get_space_logs(
88
  profile: gr.OAuthProfile | None,
89
  oauth_token: gr.OAuthToken | None
90
  ) -> str:
91
- if profile is None or oauth_token is None or not repo_id:
92
  return "⚠️ Please log in and create a Space first."
93
- endpoint = f"https://huggingface.co/api/spaces/{repo_id}/logs"
94
- headers = {"Authorization": f"Bearer {oauth_token.token}"}
95
- resp = requests.get(endpoint, headers=headers)
 
96
  if resp.status_code != 200:
97
  return f"❌ Failed to fetch logs ({resp.status_code})"
98
- entries = resp.json()
99
- return "\n".join(e.get("text","") for e in entries)
100
 
101
  # — BUILD THE UI —
102
 
@@ -114,15 +114,16 @@ with gr.Blocks(title="HF OAuth + Space Manager") as demo:
114
  login_btn = gr.LoginButton(variant="huggingface", size="lg")
115
  status_md = gr.Markdown("*Not logged in.*")
116
  models_md = gr.Markdown()
117
- demo.load(show_profile, inputs=None, outputs=status_md)
118
- login_btn.click(show_profile, inputs=None, outputs=status_md)
119
- demo.load(list_private_models, inputs=None, outputs=models_md)
120
- login_btn.click(list_private_models, inputs=None, outputs=models_md)
 
121
 
122
  # — CREATE SPACE —
123
  repo_name = gr.Textbox(label="New Space name", placeholder="my-space")
124
  sdk_selector = gr.Radio(
125
- choices=["gradio", "streamlit"],
126
  value="gradio",
127
  label="Space template (SDK)"
128
  )
@@ -131,13 +132,13 @@ with gr.Blocks(title="HF OAuth + Space Manager") as demo:
131
  create_logs = gr.Textbox(label="Create Logs", interactive=False, lines=3)
132
  preview = gr.HTML("<p>No Space created yet.</p>")
133
 
134
- # enable create_btn after login
135
- demo.load(enable_create, inputs=[login_btn], outputs=[create_btn])
136
- login_btn.click(enable_create, inputs=[login_btn], outputs=[create_btn])
137
 
138
  create_btn.click(
139
  fn=create_space,
140
- inputs=[repo_name, sdk_selector, login_btn],
141
  outputs=[session_id, create_logs, preview]
142
  )
143
 
@@ -147,20 +148,20 @@ with gr.Blocks(title="HF OAuth + Space Manager") as demo:
147
  upload_btn = gr.Button("Upload File", interactive=False)
148
  upload_logs = gr.Textbox(label="Upload Logs", interactive=False, lines=2)
149
 
150
- # enable upload_btn after space exists & login
151
- demo.load(enable_repo_actions,
152
- inputs=[session_id, login_btn],
153
  outputs=[upload_btn])
154
- login_btn.click(enable_repo_actions,
155
- inputs=[session_id, login_btn],
156
- outputs=[upload_btn])
157
  session_id.change(enable_repo_actions,
158
- inputs=[session_id, login_btn],
159
  outputs=[upload_btn])
 
 
 
160
 
161
  upload_btn.click(
162
  fn=upload_file_to_space,
163
- inputs=[file_uploader, path_in_repo, session_id, login_btn],
164
  outputs=[upload_logs]
165
  )
166
 
@@ -168,19 +169,19 @@ with gr.Blocks(title="HF OAuth + Space Manager") as demo:
168
  logs_btn = gr.Button("Get Space Logs", interactive=False)
169
  space_logs_md = gr.Textbox(label="Space Logs", interactive=False, lines=10)
170
 
171
- demo.load(enable_repo_actions,
172
- inputs=[session_id, login_btn],
173
  outputs=[logs_btn])
174
- login_btn.click(enable_repo_actions,
175
- inputs=[session_id, login_btn],
176
- outputs=[logs_btn])
177
  session_id.change(enable_repo_actions,
178
- inputs=[session_id, login_btn],
179
  outputs=[logs_btn])
 
 
 
180
 
181
  logs_btn.click(
182
  fn=get_space_logs,
183
- inputs=[session_id, login_btn],
184
  outputs=[space_logs_md]
185
  )
186
 
 
27
  profile: gr.OAuthProfile | None,
28
  oauth_token: gr.OAuthToken | None
29
  ):
30
+ # Called with no inputs→Gradio auto‑injects profile & token
31
  return gr.update(interactive=profile is not None)
32
 
33
  def enable_repo_actions(
 
35
  profile: gr.OAuthProfile | None,
36
  oauth_token: gr.OAuthToken | None
37
  ):
38
+ # Called with inputs=[session_id]→Gradio injects profile & token
39
  return gr.update(interactive=bool(repo_id and profile and oauth_token))
40
 
41
  # — CORE ACTIONS —
 
46
  profile: gr.OAuthProfile | None,
47
  oauth_token: gr.OAuthToken | None
48
  ) -> tuple[str, str, str]:
49
+ if not profile or not oauth_token:
50
  return "", "⚠️ Please log in first.", "<p>No Space created yet.</p>"
51
  repo_id = f"{profile.username}/{repo_name}"
52
  create_repo(
 
62
  return repo_id, logmsg, iframe
63
 
64
  def upload_file_to_space(
65
+ file,
66
  path_in_repo: str,
67
  repo_id: str,
68
  profile: gr.OAuthProfile | None,
69
  oauth_token: gr.OAuthToken | None
70
  ) -> str:
71
+ if not profile or not oauth_token:
72
  return "⚠️ Please log in first."
73
  if not repo_id:
74
  return "⚠️ Please create a Space first."
75
+ if not file:
76
  return "⚠️ No file selected."
77
  upload_file(
78
  path_or_fileobj=file.name,
 
88
  profile: gr.OAuthProfile | None,
89
  oauth_token: gr.OAuthToken | None
90
  ) -> str:
91
+ if not profile or not oauth_token or not repo_id:
92
  return "⚠️ Please log in and create a Space first."
93
+ resp = requests.get(
94
+ f"https://huggingface.co/api/spaces/{repo_id}/logs",
95
+ headers={"Authorization": f"Bearer {oauth_token.token}"}
96
+ )
97
  if resp.status_code != 200:
98
  return f"❌ Failed to fetch logs ({resp.status_code})"
99
+ return "\n".join(entry.get("text","") for entry in resp.json())
 
100
 
101
  # — BUILD THE UI —
102
 
 
114
  login_btn = gr.LoginButton(variant="huggingface", size="lg")
115
  status_md = gr.Markdown("*Not logged in.*")
116
  models_md = gr.Markdown()
117
+ demo.load(show_profile, inputs=None, outputs=status_md)
118
+ login_btn.click(show_profile, inputs=None, outputs=status_md)
119
+ demo.load(list_private_models, inputs=None, outputs=models_md)
120
+ login_btn.click(list_private_models,
121
+ inputs=None, outputs=models_md)
122
 
123
  # — CREATE SPACE —
124
  repo_name = gr.Textbox(label="New Space name", placeholder="my-space")
125
  sdk_selector = gr.Radio(
126
+ choices=["gradio","streamlit"],
127
  value="gradio",
128
  label="Space template (SDK)"
129
  )
 
132
  create_logs = gr.Textbox(label="Create Logs", interactive=False, lines=3)
133
  preview = gr.HTML("<p>No Space created yet.</p>")
134
 
135
+ # enable create_btn once logged in
136
+ demo.load(enable_create, inputs=None, outputs=[create_btn])
137
+ login_btn.click(enable_create, inputs=None, outputs=[create_btn])
138
 
139
  create_btn.click(
140
  fn=create_space,
141
+ inputs=[repo_name, sdk_selector], # only non‑OAuth inputs
142
  outputs=[session_id, create_logs, preview]
143
  )
144
 
 
148
  upload_btn = gr.Button("Upload File", interactive=False)
149
  upload_logs = gr.Textbox(label="Upload Logs", interactive=False, lines=2)
150
 
151
+ # enable upload_btn once space exists & logged in
152
+ demo.load(enable_repo_actions,
153
+ inputs=[session_id], # only non‑OAuth inputs
154
  outputs=[upload_btn])
 
 
 
155
  session_id.change(enable_repo_actions,
156
+ inputs=[session_id],
157
  outputs=[upload_btn])
158
+ login_btn.click(enable_repo_actions,
159
+ inputs=[session_id],
160
+ outputs=[upload_btn])
161
 
162
  upload_btn.click(
163
  fn=upload_file_to_space,
164
+ inputs=[file_uploader, path_in_repo, session_id],
165
  outputs=[upload_logs]
166
  )
167
 
 
169
  logs_btn = gr.Button("Get Space Logs", interactive=False)
170
  space_logs_md = gr.Textbox(label="Space Logs", interactive=False, lines=10)
171
 
172
+ demo.load(enable_repo_actions,
173
+ inputs=[session_id],
174
  outputs=[logs_btn])
 
 
 
175
  session_id.change(enable_repo_actions,
176
+ inputs=[session_id],
177
  outputs=[logs_btn])
178
+ login_btn.click(enable_repo_actions,
179
+ inputs=[session_id],
180
+ outputs=[logs_btn])
181
 
182
  logs_btn.click(
183
  fn=get_space_logs,
184
+ inputs=[session_id],
185
  outputs=[space_logs_md]
186
  )
187