nsfwalex commited on
Commit
89bc548
·
1 Parent(s): c596720
Files changed (2) hide show
  1. README.md +1 -1
  2. loader.py +79 -25
README.md CHANGED
@@ -4,7 +4,7 @@ emoji: 👀
4
  colorFrom: red
5
  colorTo: indigo
6
  sdk: gradio
7
- sdk_version: 5.9.1
8
  app_file: app.py
9
  pinned: false
10
  short_description: image_generator
 
4
  colorFrom: red
5
  colorTo: indigo
6
  sdk: gradio
7
+ sdk_version: 4.44.1
8
  app_file: app.py
9
  pinned: false
10
  short_description: image_generator
loader.py CHANGED
@@ -1,46 +1,89 @@
1
  import os
 
2
  from huggingface_hub import hf_hub_download
3
 
4
  def load_script(file_str: str):
5
  """
6
- file_str: something like 'myorg/myrepo/mysubfolder/myscript.py'
7
- This function downloads the file from the Hugging Face Hub into ./ (current directory).
 
 
 
 
 
8
  """
9
  try:
10
  # Split the path by "/"
11
- parts = file_str.split("/")
12
 
13
- if len(parts) < 3:
14
  raise ValueError(
15
  f"Invalid file specification '{file_str}'. "
16
  f"Expected format: 'repo_id/[subfolder]/filename'"
17
  )
18
 
19
- # First two parts form the repo_id (e.g. 'myorg/myrepo')
20
  repo_id = "/".join(parts[:2])
21
 
22
- # Last part is the actual filename (e.g. 'myscript.py')
23
  filename = parts[-1]
24
 
25
  # Anything between the second and last parts is a subfolder path
26
- subfolder = None
27
- if len(parts) > 3:
28
- subfolder = "/".join(parts[2:-1])
29
 
30
  # Retrieve HF token from environment
31
  hf_token = os.getenv("HF_TOKEN", None)
 
 
32
 
33
  # Download the file into current directory "."
34
  file_path = hf_hub_download(
35
  repo_id=repo_id,
36
  filename=filename,
37
  subfolder=subfolder,
38
- token=hf_token,
39
  repo_type="space",
40
- local_dir="." # Download into current directory
 
 
41
  )
42
 
43
- print(f"Downloaded {filename} from {repo_id} to {file_path}")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
  return file_path
45
 
46
  except Exception as e:
@@ -50,33 +93,40 @@ def load_script(file_str: str):
50
 
51
  def load_scripts():
52
  """
53
- 1. Get the path of the 'FILE_LIST' file from the environment variable FILE_LIST.
54
- 2. Download that file list using load_script().
55
- 3. Read its lines, and each line is another file to be downloaded using load_script().
56
- 4. After all lines are downloaded, execute the last file.
 
 
 
57
  """
58
  file_list = os.getenv("FILE_LIST", "").strip()
59
  if not file_list:
60
- print("No FILE_LIST environment variable set. Nothing to download.")
61
  return
62
 
 
 
63
  # Step 1: Download the file list itself
64
  file_list_path = load_script(file_list)
65
  if not file_list_path or not os.path.exists(file_list_path):
66
- print(f"Could not download or find file list: {file_list_path}")
67
  return
68
-
69
  # Step 2: Read each line in the downloaded file list
70
  try:
71
  with open(file_list_path, 'r') as f:
72
  lines = [line.strip() for line in f if line.strip()]
 
73
  except Exception as e:
74
- print(f"Error reading file list: {e}")
75
  return
76
 
77
  # Step 3: Download each file from the lines
78
  downloaded_files = []
79
- for file_str in lines:
 
80
  file_path = load_script(file_str)
81
  if file_path:
82
  downloaded_files.append(file_path)
@@ -84,13 +134,17 @@ def load_scripts():
84
  # Step 4: Execute the last downloaded file
85
  if downloaded_files:
86
  last_file_path = downloaded_files[-1]
87
- print(f"Executing the last downloaded script: {last_file_path}")
88
  try:
89
  with open(last_file_path, 'r') as f:
90
- exec(f.read(), globals())
 
 
91
  except Exception as e:
92
- print(f"Error executing the last downloaded script: {e}")
 
 
 
93
 
94
 
95
- # Run the load_scripts function
96
  load_scripts()
 
1
  import os
2
+ import sys
3
  from huggingface_hub import hf_hub_download
4
 
5
  def load_script(file_str: str):
6
  """
7
+ Downloads a file from the Hugging Face Hub and ensures a symlink exists in the current directory.
8
+
9
+ Parameters:
10
+ - file_str (str): Path in the format 'repo_id/[subfolder]/filename', e.g., 'myorg/myrepo/mysubfolder/myscript.py'
11
+
12
+ Returns:
13
+ - str: The path to the downloaded file.
14
  """
15
  try:
16
  # Split the path by "/"
17
+ parts = file_str.strip().split("/")
18
 
19
+ if len(parts) < 2:
20
  raise ValueError(
21
  f"Invalid file specification '{file_str}'. "
22
  f"Expected format: 'repo_id/[subfolder]/filename'"
23
  )
24
 
25
+ # First two parts form the repo_id (e.g., 'myorg/myrepo')
26
  repo_id = "/".join(parts[:2])
27
 
28
+ # Last part is the actual filename (e.g., 'myscript.py')
29
  filename = parts[-1]
30
 
31
  # Anything between the second and last parts is a subfolder path
32
+ subfolder = "/".join(parts[2:-1]) if len(parts) > 3 else None
 
 
33
 
34
  # Retrieve HF token from environment
35
  hf_token = os.getenv("HF_TOKEN", None)
36
+ if not hf_token:
37
+ print("Warning: 'HF_TOKEN' environment variable not set. Proceeding without authentication.")
38
 
39
  # Download the file into current directory "."
40
  file_path = hf_hub_download(
41
  repo_id=repo_id,
42
  filename=filename,
43
  subfolder=subfolder,
 
44
  repo_type="space",
45
+ token=hf_token,
46
+ local_dir=".", # Download into the current directory
47
+ force_download=True,
48
  )
49
 
50
+ print(f"Downloaded '{filename}' from '{repo_id}' to '{file_path}'")
51
+
52
+ # Absolute paths for comparison
53
+ current_dir = os.path.abspath(".")
54
+ downloaded_file_abs = os.path.abspath(file_path)
55
+ downloaded_dir_abs = os.path.dirname(downloaded_file_abs)
56
+
57
+ # If the file is not in the current directory, create a symlink
58
+ if downloaded_dir_abs != current_dir:
59
+ symlink_path = os.path.join(current_dir, filename)
60
+
61
+ # If symlink exists, remove it
62
+ if os.path.islink(symlink_path) or os.path.exists(symlink_path):
63
+ try:
64
+ os.remove(symlink_path)
65
+ print(f"Removed existing link or file: '{symlink_path}'")
66
+ except Exception as e:
67
+ print(f"Error removing existing link '{symlink_path}': {e}")
68
+ return file_path # Return the actual file path even if symlink fails
69
+
70
+ # Create a relative symlink
71
+ relative_target = os.path.relpath(downloaded_file_abs, current_dir)
72
+ try:
73
+ os.symlink(relative_target, symlink_path)
74
+ print(f"Created symlink: '{symlink_path}' -> '{relative_target}'")
75
+ except OSError as e:
76
+ print(f"Failed to create symlink for '{filename}': {e}")
77
+ # On Windows, creating symlinks may require admin privileges
78
+ # Alternatively, you can copy the file instead of linking
79
+ # Uncomment the following lines to copy the file if symlink fails
80
+ # import shutil
81
+ # try:
82
+ # shutil.copy2(downloaded_file_abs, symlink_path)
83
+ # print(f"Copied '{filename}' to '{symlink_path}'")
84
+ # except Exception as copy_e:
85
+ # print(f"Failed to copy file for '{filename}': {copy_e}")
86
+
87
  return file_path
88
 
89
  except Exception as e:
 
93
 
94
  def load_scripts():
95
  """
96
+ Downloads and executes scripts based on a file list from the Hugging Face Hub.
97
+
98
+ Steps:
99
+ 1. Retrieve the 'FILE_LIST' environment variable, which specifies the file list path.
100
+ 2. Download the file list using `load_script()`.
101
+ 3. Read each line from the downloaded file list, where each line specifies another file to download.
102
+ 4. After downloading all files, execute the last downloaded file.
103
  """
104
  file_list = os.getenv("FILE_LIST", "").strip()
105
  if not file_list:
106
+ print("No 'FILE_LIST' environment variable set. Nothing to download.")
107
  return
108
 
109
+ print(f"FILE_LIST: '{file_list}'")
110
+
111
  # Step 1: Download the file list itself
112
  file_list_path = load_script(file_list)
113
  if not file_list_path or not os.path.exists(file_list_path):
114
+ print(f"Could not download or find file list: '{file_list_path}'")
115
  return
116
+
117
  # Step 2: Read each line in the downloaded file list
118
  try:
119
  with open(file_list_path, 'r') as f:
120
  lines = [line.strip() for line in f if line.strip()]
121
+ print(f"Found {len(lines)} files to download from the file list.")
122
  except Exception as e:
123
+ print(f"Error reading file list '{file_list_path}': {e}")
124
  return
125
 
126
  # Step 3: Download each file from the lines
127
  downloaded_files = []
128
+ for idx, file_str in enumerate(lines, start=1):
129
+ print(f"Downloading file {idx}/{len(lines)}: '{file_str}'")
130
  file_path = load_script(file_str)
131
  if file_path:
132
  downloaded_files.append(file_path)
 
134
  # Step 4: Execute the last downloaded file
135
  if downloaded_files:
136
  last_file_path = downloaded_files[-1]
137
+ print(f"Executing the last downloaded script: '{last_file_path}'")
138
  try:
139
  with open(last_file_path, 'r') as f:
140
+ script_content = f.read()
141
+ exec(script_content, globals())
142
+ print(f"Successfully executed '{last_file_path}'")
143
  except Exception as e:
144
+ print(f"Error executing the last downloaded script '{last_file_path}': {e}")
145
+ else:
146
+ print("No files were downloaded to execute.")
147
+
148
 
149
 
 
150
  load_scripts()