ttttdiva commited on
Commit
4762059
·
verified ·
1 Parent(s): d5f4215

Upload main.py

Browse files
Files changed (1) hide show
  1. main.py +55 -26
main.py CHANGED
@@ -133,49 +133,78 @@ class CivitAICrawler:
133
  logger.error(f"[ERR] upload_folder: {e}")
134
 
135
  def encrypt_and_upload_folder(self, local_folder: str) -> Optional[str]:
136
- """local_folder -> cryptLocal: => encrypted/??? => upload_folder => cleanup"""
 
 
 
 
 
 
 
137
  if not os.path.isdir(local_folder):
138
  logger.error(f"[ERR] {local_folder} is not a directory.")
139
  return None
140
 
141
- encrypted_dir = os.path.join(os.getcwd(), "encrypted")
142
- os.makedirs(encrypted_dir, exist_ok=True)
 
 
143
 
144
- before = set(os.listdir(encrypted_dir))
145
- # rclone copy
146
- cmd = ["rclone", "copy", local_folder, "cryptLocal:", "--create-empty-src-dirs"]
147
- logger.info(f"[CMD] {' '.join(cmd)}")
148
  try:
149
- subprocess.run(cmd, check=True)
150
- logger.info(f"[OK] rclone copy => cryptLocal:")
151
  except subprocess.CalledProcessError as e:
152
- logger.error(f"[ERR] rclone copy failed: {e}")
153
  return None
154
 
155
- after = set(os.listdir(encrypted_dir))
156
- diff = after - before
157
- if not diff:
158
- logger.error("[ERR] no new directory in ./encrypted after copy")
 
 
 
 
159
  return None
160
- if len(diff) > 1:
161
- logger.warning(f"[WARN] multiple new dirs => {diff}")
162
- enc_name = diff.pop()
163
- enc_path = os.path.join(encrypted_dir, enc_name)
164
- if not os.path.isdir(enc_path):
165
- logger.error(f"[ERR] {enc_path} is not a directory.")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
166
  return None
167
 
168
- # HF upload folder
169
  try:
170
- self.upload_folder(enc_path, path_in_repo=enc_name)
171
  except Exception as e:
172
  logger.error(f"[ERR] encrypt_and_upload_folder => upload_folder: {e}")
173
 
174
- # cleanup
 
175
  shutil.rmtree(local_folder, ignore_errors=True)
176
- shutil.rmtree(enc_path, ignore_errors=True)
177
- logger.info(f"[CLEANUP] removed {local_folder} & {enc_path}")
178
- return enc_name
 
179
 
180
  # ここで「download_and_process_versions」(=古いバージョン含めまとめてダウンロード) 定義
181
  # => 今回は名前を合わせ「download_and_process_versions」に合わせる
 
133
  logger.error(f"[ERR] upload_folder: {e}")
134
 
135
  def encrypt_and_upload_folder(self, local_folder: str) -> Optional[str]:
136
+ """
137
+ 1) subfolder_label = モデルフォルダ名 (local_folderのベース名)
138
+ 2) rclone mkdir cryptLocal:subfolder_label
139
+ 3) rclone copy local_folder => cryptLocal:subfolder_label
140
+ 4) rclone copy cryptLocal:subfolder_label => encrypted/subfolder_label (差分検知やめる)
141
+ 5) upload_folder(encrypted/subfolder_label, path_in_repo=subfolder_label)
142
+ 6) cleanup
143
+ """
144
  if not os.path.isdir(local_folder):
145
  logger.error(f"[ERR] {local_folder} is not a directory.")
146
  return None
147
 
148
+ subfolder_label = os.path.basename(local_folder) # ★ モデル名 or ファイル名を取得
149
+ if not subfolder_label:
150
+ logger.error(f"[ERR] local_folder has empty basename: {local_folder}")
151
+ return None
152
 
153
+ # === 1) rclone mkdir
154
+ mkdir_cmd = ["rclone", "mkdir", f"cryptLocal:{subfolder_label}"]
155
+ logger.info(f"[CMD] {' '.join(mkdir_cmd)}")
 
156
  try:
157
+ subprocess.run(mkdir_cmd, check=True)
158
+ logger.info(f"[OK] rclone mkdir cryptLocal:{subfolder_label}")
159
  except subprocess.CalledProcessError as e:
160
+ logger.error(f"[ERR] rclone mkdir => {e}")
161
  return None
162
 
163
+ # === 2) rclone copy local_folder => cryptLocal:subfolder_label
164
+ copy_cmd = ["rclone", "copy", local_folder, f"cryptLocal:{subfolder_label}", "--create-empty-src-dirs"]
165
+ logger.info(f"[CMD] {' '.join(copy_cmd)}")
166
+ try:
167
+ subprocess.run(copy_cmd, check=True)
168
+ logger.info(f"[OK] rclone copy => cryptLocal:{subfolder_label}")
169
+ except subprocess.CalledProcessError as e:
170
+ logger.error(f"[ERR] rclone copy => {e}")
171
  return None
172
+
173
+ # === 3) ローカル "encrypted/subfolder_label" に復号ファイル(?) を落とすかどうか
174
+ # → HFへのフォルダアップには「ローカルに暗号ファイル群」が必要
175
+ # → しかし "directory_name_encryption=true" ならリモート名だけで復号されず、ランダム名かも
176
+ # 今回は「物理的に local へ落として upload_folder()」する想定にする
177
+ encrypted_base = os.path.join(os.getcwd(), "encrypted")
178
+ os.makedirs(encrypted_base, exist_ok=True)
179
+
180
+ # remove old if exist
181
+ local_enc_path = os.path.join(encrypted_base, subfolder_label)
182
+ if os.path.exists(local_enc_path):
183
+ shutil.rmtree(local_enc_path)
184
+
185
+ # rclone copy cryptLocal:subfolder_label => encrypted/subfolder_label
186
+ pull_cmd = ["rclone", "copy", f"cryptLocal:{subfolder_label}", local_enc_path, "--create-empty-src-dirs"]
187
+ logger.info(f"[CMD] {' '.join(pull_cmd)}")
188
+ try:
189
+ subprocess.run(pull_cmd, check=True)
190
+ logger.info(f"[OK] rclone copy => {local_enc_path}")
191
+ except subprocess.CalledProcessError as e:
192
+ logger.error(f"[ERR] rclone copy back => {e}")
193
  return None
194
 
195
+ # === 4) upload_folder(local_enc_path, path_in_repo=subfolder_label)
196
  try:
197
+ self.upload_folder(local_enc_path, path_in_repo=subfolder_label)
198
  except Exception as e:
199
  logger.error(f"[ERR] encrypt_and_upload_folder => upload_folder: {e}")
200
 
201
+ # === 5) cleanup
202
+ # remove local_folder & local_enc_path
203
  shutil.rmtree(local_folder, ignore_errors=True)
204
+ shutil.rmtree(local_enc_path, ignore_errors=True)
205
+ logger.info(f"[CLEANUP] removed {local_folder} & {local_enc_path}")
206
+
207
+ return subfolder_label
208
 
209
  # ここで「download_and_process_versions」(=古いバージョン含めまとめてダウンロード) 定義
210
  # => 今回は名前を合わせ「download_and_process_versions」に合わせる