John6666 commited on
Commit
0134a66
1 Parent(s): a531515

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +18 -7
app.py CHANGED
@@ -1,6 +1,8 @@
1
  import gradio as gr
2
  import requests
3
  from pathlib import Path
 
 
4
  from huggingface_hub import whoami, HfApi, hf_hub_download
5
  from huggingface_hub.utils import build_hf_headers, hf_raise_for_status
6
  from gradio_huggingfacehub_search import HuggingfaceHubSearch
@@ -9,9 +11,10 @@ ENDPOINT = "https://huggingface.co"
9
  # ENDPOINT = "http://localhost:5564"
10
 
11
  REPO_TYPES = ["model", "dataset", "space"]
 
12
 
13
 
14
- def duplicate(source_repo, dst_repo, repo_type, private, overwrite, oauth_token: gr.OAuthToken | None, progress=gr.Progress(track_tqdm=True)):
15
  print(oauth_token.token)
16
  hf_token = oauth_token.token
17
  api = HfApi(token=hf_token)
@@ -21,14 +24,21 @@ def duplicate(source_repo, dst_repo, repo_type, private, overwrite, oauth_token:
21
  _ = whoami(oauth_token.token)
22
  # ^ this will throw if token is invalid
23
 
24
- if overwrite and api.repo_exists(repo_id=dst_repo, repo_type=repo_type, token=hf_token):
 
 
 
 
 
 
 
25
  for path in api.list_repo_files(repo_id=source_repo, repo_type=repo_type, token=hf_token):
26
  file = hf_hub_download(repo_id=source_repo, filename=path, repo_type=repo_type, token=hf_token)
27
  if not Path(file).exists(): continue
28
  if Path(file).is_dir(): # unused for now
29
- api.upload_folder(repo_id=dst_repo, folder_path=file, path_in_repo=path, repo_type=repo_type, token=hf_token)
30
  elif Path(file).is_file():
31
- api.upload_file(repo_id=dst_repo, path_or_fileobj=file, path_in_repo=path, repo_type=repo_type, token=hf_token)
32
  if Path(file).exists(): Path(file).unlink()
33
  if repo_type == "dataset": repo_url = f"https://huggingface.co/datasets/{dst_repo}"
34
  elif repo_type == "space": repo_url = f"https://huggingface.co/spaces/{dst_repo}"
@@ -59,10 +69,11 @@ interface = gr.Interface(
59
  search_type=["model", "dataset", "space"],
60
  sumbit_on_select=False,
61
  ),
62
- gr.Textbox(placeholder="Destination repository (e.g. osanseviero/dst)"),
63
  gr.Dropdown(choices=REPO_TYPES, value="model"),
64
- gr.Checkbox(label="Make new repo private?"),
65
- gr.Checkbox(label="Overwrite existing repo?"),
 
66
  ],
67
  outputs=[
68
  gr.Markdown(label="output"),
 
1
  import gradio as gr
2
  import requests
3
  from pathlib import Path
4
+ import re
5
+ import os
6
  from huggingface_hub import whoami, HfApi, hf_hub_download
7
  from huggingface_hub.utils import build_hf_headers, hf_raise_for_status
8
  from gradio_huggingfacehub_search import HuggingfaceHubSearch
 
11
  # ENDPOINT = "http://localhost:5564"
12
 
13
  REPO_TYPES = ["model", "dataset", "space"]
14
+ HF_REPO = os.environ.get("HF_REPO") if os.environ.get("HF_REPO") else "" # set your default repo
15
 
16
 
17
+ def duplicate(source_repo, dst_repo, repo_type, private, overwrite, auto_dir, oauth_token: gr.OAuthToken | None, progress=gr.Progress(track_tqdm=True)):
18
  print(oauth_token.token)
19
  hf_token = oauth_token.token
20
  api = HfApi(token=hf_token)
 
24
  _ = whoami(oauth_token.token)
25
  # ^ this will throw if token is invalid
26
 
27
+ if re.fullmatch(r'^[\w_\-\.]+/[\w_\-\.]+$', dst_repo): subfolder = ""
28
+ else:
29
+ dst_repo, subfolder = re.findall(r'^([\w_\-\.]+/[\w_\-\.]+)/?(.+)?$', dst_repo)[0]
30
+ subfolder = subfolder.removesuffix("/")
31
+ if auto_dir: subfolder = source_repo
32
+
33
+ if overwrite and api.repo_exists(repo_id=dst_repo, repo_type=repo_type, token=hf_token) or subfolder:
34
+ api.create_repo(repo_id=dst_repo, repo_type=repo_type, private=private, exist_ok=True, token=hf_token)
35
  for path in api.list_repo_files(repo_id=source_repo, repo_type=repo_type, token=hf_token):
36
  file = hf_hub_download(repo_id=source_repo, filename=path, repo_type=repo_type, token=hf_token)
37
  if not Path(file).exists(): continue
38
  if Path(file).is_dir(): # unused for now
39
+ api.upload_folder(repo_id=dst_repo, folder_path=file, path_in_repo=f"{subfolder}/{path}" if subfolder else path, repo_type=repo_type, token=hf_token)
40
  elif Path(file).is_file():
41
+ api.upload_file(repo_id=dst_repo, path_or_fileobj=file, path_in_repo=f"{subfolder}/{path}" if subfolder else path, repo_type=repo_type, token=hf_token)
42
  if Path(file).exists(): Path(file).unlink()
43
  if repo_type == "dataset": repo_url = f"https://huggingface.co/datasets/{dst_repo}"
44
  elif repo_type == "space": repo_url = f"https://huggingface.co/spaces/{dst_repo}"
 
69
  search_type=["model", "dataset", "space"],
70
  sumbit_on_select=False,
71
  ),
72
+ gr.Textbox(placeholder="Destination repository (e.g. osanseviero/dst)", value=HF_REPO),
73
  gr.Dropdown(choices=REPO_TYPES, value="model"),
74
+ gr.Checkbox(label="Make new repo private?", value=True),
75
+ gr.Checkbox(label="Overwrite existing repo?", value=True),
76
+ gr.Checkbox(label="Create subdirectories automatically?", value=True),
77
  ],
78
  outputs=[
79
  gr.Markdown(label="output"),