broadfield-dev commited on
Commit
f8f509f
·
verified ·
1 Parent(s): 6fb9d53

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +24 -4
app.py CHANGED
@@ -31,7 +31,7 @@ def handle_token_change(token):
31
  user_info = api.whoami()
32
  username = user_info.get('name')
33
  updates = {
34
- manage_files_btn: gr.update(interactive=True), delete_repo_btn: gr.update(interactive=True),
35
  commit_btn: gr.update(interactive=True), author_input: gr.update(value=username),
36
  download_author_input: gr.update(value=username), whoami_output: gr.update(value=user_info, visible=True)
37
  }
@@ -39,7 +39,7 @@ def handle_token_change(token):
39
  except HfHubHTTPError as e:
40
  gr.Warning(f"Invalid Token: {e}. You can only perform read-only actions.")
41
  updates = {
42
- manage_files_btn: gr.update(interactive=False), delete_repo_btn: gr.update(interactive=False),
43
  commit_btn: gr.update(interactive=False), whoami_output: gr.update(value=None, visible=False)
44
  }
45
  return (token, *updates.values())
@@ -93,6 +93,20 @@ def delete_repo(token, repo_id, repo_type):
93
  gr.Error(f"Failed to delete repository: {e}")
94
  return repo_id, gr.update(visible=True), gr.update(visible=False)
95
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
96
  # --- File Management Functions ---
97
 
98
  def show_files_and_load_first(token, repo_id, repo_type):
@@ -206,6 +220,8 @@ with gr.Blocks(theme=gr.themes.Soft(primary_hue="blue"), title="Hugging Face Hub
206
  gr.Markdown("### 2. Choose an Action")
207
  manage_files_btn = gr.Button("Manage Files", interactive=False)
208
  delete_repo_btn = gr.Button("Delete This Repo", variant="stop", interactive=False)
 
 
209
  with gr.Column(visible=False) as editor_panel:
210
  gr.Markdown("### 3. Edit Files")
211
  file_selector = gr.Dropdown(label="Select File", interactive=True)
@@ -236,14 +252,18 @@ with gr.Blocks(theme=gr.themes.Soft(primary_hue="blue"), title="Hugging Face Hub
236
 
237
  # --- Global and Cross-Tab Event Handlers ---
238
  hf_token.change(fn=handle_token_change, inputs=hf_token,
239
- outputs=[hf_token_state, manage_files_btn, delete_repo_btn, commit_btn, author_input, download_author_input, whoami_output])
240
 
241
  manage_repo_dropdown.select(fn=on_manage_repo_select, inputs=manage_repo_dropdown, outputs=action_panel)
242
 
243
  manage_files_btn.click(fn=show_files_and_load_first,
244
  inputs=[hf_token_state, manage_repo_dropdown, manage_repo_type_state],
245
  outputs=[editor_panel, file_selector, code_editor])
246
-
 
 
 
 
247
  delete_repo_btn.click(fn=delete_repo, inputs=[hf_token_state, manage_repo_dropdown, manage_repo_type_state],
248
  outputs=[manage_repo_dropdown, action_panel, editor_panel],
249
  js="() => confirm('Are you sure you want to permanently delete this repository?')")
 
31
  user_info = api.whoami()
32
  username = user_info.get('name')
33
  updates = {
34
+ manage_files_btn: gr.update(interactive=True), archive_repo_btn: gr.update(interactive=True), delete_repo_btn: gr.update(interactive=True),
35
  commit_btn: gr.update(interactive=True), author_input: gr.update(value=username),
36
  download_author_input: gr.update(value=username), whoami_output: gr.update(value=user_info, visible=True)
37
  }
 
39
  except HfHubHTTPError as e:
40
  gr.Warning(f"Invalid Token: {e}. You can only perform read-only actions.")
41
  updates = {
42
+ manage_files_btn: gr.update(interactive=False), archive_repo_btn: gr.update(interactive=False), delete_repo_btn: gr.update(interactive=False),
43
  commit_btn: gr.update(interactive=False), whoami_output: gr.update(value=None, visible=False)
44
  }
45
  return (token, *updates.values())
 
93
  gr.Error(f"Failed to delete repository: {e}")
94
  return repo_id, gr.update(visible=True), gr.update(visible=False)
95
 
96
+ def archive_repo(token, repo_id, archive_repo):
97
+ """Deletes the selected repository."""
98
+ if not token:
99
+ gr.Error("A write-enabled Hugging Face token is required to delete a repository.")
100
+ return repo_id, gr.update(visible=True), gr.update(visible=False)
101
+ try:
102
+ api = get_hf_api(token)
103
+ archive_space=f'{archive_repo}/{repo_id.split("/")[1]}'
104
+ api.move_repo(repo_id=repo_id, archive_space=archive_space)
105
+ gr.Info(f"Successfully moved to '{archive_space}'.")
106
+ return None, gr.update(visible=False), gr.update(visible=False)
107
+ except HfHubHTTPError as e:
108
+ gr.Error(f"Failed to archive repository: {e}")
109
+ return repo_id, gr.update(visible=True), gr.update(visible=False)
110
  # --- File Management Functions ---
111
 
112
  def show_files_and_load_first(token, repo_id, repo_type):
 
220
  gr.Markdown("### 2. Choose an Action")
221
  manage_files_btn = gr.Button("Manage Files", interactive=False)
222
  delete_repo_btn = gr.Button("Delete This Repo", variant="stop", interactive=False)
223
+ archive_repo_name = gr.Textbox(label="Archive",placeholder="my_archive, will append /repo_name")
224
+ archive_repo_btn = gr.Button("Send to Archive", variant="secondary", interactive=False)
225
  with gr.Column(visible=False) as editor_panel:
226
  gr.Markdown("### 3. Edit Files")
227
  file_selector = gr.Dropdown(label="Select File", interactive=True)
 
252
 
253
  # --- Global and Cross-Tab Event Handlers ---
254
  hf_token.change(fn=handle_token_change, inputs=hf_token,
255
+ outputs=[hf_token_state, manage_files_btn, archive_repo_btn, delete_repo_btn, commit_btn, author_input, download_author_input, whoami_output])
256
 
257
  manage_repo_dropdown.select(fn=on_manage_repo_select, inputs=manage_repo_dropdown, outputs=action_panel)
258
 
259
  manage_files_btn.click(fn=show_files_and_load_first,
260
  inputs=[hf_token_state, manage_repo_dropdown, manage_repo_type_state],
261
  outputs=[editor_panel, file_selector, code_editor])
262
+
263
+ archive_repo_btn.click(fn=archive_repo, inputs=[hf_token_state, manage_repo_dropdown, archive_repo_name],
264
+ outputs=[manage_repo_dropdown, action_panel, editor_panel],
265
+ js="() => confirm('Are you sure you want to archive this repo?')")
266
+
267
  delete_repo_btn.click(fn=delete_repo, inputs=[hf_token_state, manage_repo_dropdown, manage_repo_type_state],
268
  outputs=[manage_repo_dropdown, action_panel, editor_panel],
269
  js="() => confirm('Are you sure you want to permanently delete this repository?')")