ttttdiva commited on
Commit
65648d4
·
verified ·
1 Parent(s): 6b12d98

Upload main.py

Browse files
Files changed (1) hide show
  1. main.py +28 -33
main.py CHANGED
@@ -201,19 +201,22 @@ class CivitAICrawler:
201
 
202
  def encrypt_and_upload_folder(self, local_folder: str) -> Optional[str]:
203
  """
204
- 1. rclone mkdir cryptLocal:subfolder_label
205
- 2. rclone copy local_folder => cryptLocal:subfolder_label
206
- 3. upload_folder() ローカル削除
 
 
207
  """
208
  if not os.path.isdir(local_folder):
209
- logger.error(f"encrypt_and_upload_folder: {local_folder} is not a directory.")
210
  return None
211
 
212
  encrypted_base_dir = os.path.join(os.getcwd(), "encrypted")
213
  os.makedirs(encrypted_base_dir, exist_ok=True)
214
 
215
- # 既存の暗号物を削除
216
- for item in os.listdir(encrypted_base_dir):
 
217
  item_path = os.path.join(encrypted_base_dir, item)
218
  try:
219
  if os.path.isfile(item_path):
@@ -224,52 +227,43 @@ class CivitAICrawler:
224
  except Exception as e:
225
  logger.warning(f"[CLEANUP] Failed to remove {item_path}: {e}")
226
 
227
- subfolder_label = "enc_" + str(uuid.uuid4())[:8]
228
-
229
- # mkdir
230
- try:
231
- subprocess.run(["rclone", "mkdir", f"cryptLocal:{subfolder_label}"], check=True)
232
- logger.info(f"[OK] rclone mkdir cryptLocal:{subfolder_label}")
233
- except subprocess.CalledProcessError as e:
234
- logger.error(f"rclone mkdir failed: {e}")
235
- return None
236
-
237
- # copy
238
  try:
239
  subprocess.run(
240
- [
241
- "rclone", "copy",
242
- local_folder,
243
- f"cryptLocal:{subfolder_label}",
244
- "--create-empty-src-dirs"
245
- ],
246
  check=True
247
  )
248
- logger.info(f"[OK] rclone copy {local_folder} => cryptLocal:{subfolder_label}")
249
  except subprocess.CalledProcessError as e:
250
  logger.error(f"rclone copy failed: {e}")
251
  return None
252
 
253
- # 差分検知
254
- after_list = os.listdir(encrypted_base_dir)
255
- if not after_list:
256
- logger.error("[ERROR] No new directory in ./encrypted after rclone copy.")
 
257
  return None
258
- enc_folder_name = after_list[0] # 先頭を使う
 
 
 
259
  enc_folder_path = os.path.join(encrypted_base_dir, enc_folder_name)
260
 
261
  if not os.path.isdir(enc_folder_path):
262
  logger.error(f"[ERROR] {enc_folder_path} is not a directory.")
263
  return None
264
 
265
- # upload_folder
 
266
  try:
267
- self.upload_folder(enc_folder_path, path_in_repo=subfolder_label)
268
  logger.info(f"[OK] Uploaded encrypted folder: {enc_folder_path}")
269
  except Exception as e:
270
  logger.error(f"Failed to upload encrypted folder {enc_folder_path}: {e}")
271
 
272
- # ローカル削除
273
  try:
274
  shutil.rmtree(local_folder)
275
  shutil.rmtree(enc_folder_path)
@@ -277,7 +271,8 @@ class CivitAICrawler:
277
  except Exception as e:
278
  logger.warning(f"[CLEANUP] Could not remove local folders: {e}")
279
 
280
- return subfolder_label
 
281
 
282
  def upload_file(self, file_path: str, repo_id: Optional[str] = None, path_in_repo: Optional[str] = None):
283
  if repo_id is None:
 
201
 
202
  def encrypt_and_upload_folder(self, local_folder: str) -> Optional[str]:
203
  """
204
+ 1. rclone copy local_folder => cryptLocal: (フォルダ名はrcloneが勝手に暗号化生成)
205
+ 2. 差分検知で "./encrypted" に作られた暗号フォルダ名を取得
206
+ 3. そのフォルダ名を path_in_repo として Hugging Face にアップロード
207
+ 4. ローカル(平文+暗号)フォルダ削除
208
+ 5. 戻り値は "実際に作られた暗号フォルダ名"
209
  """
210
  if not os.path.isdir(local_folder):
211
+ logger.error(f"[encrypt_and_upload_folder] Not a directory: {local_folder}")
212
  return None
213
 
214
  encrypted_base_dir = os.path.join(os.getcwd(), "encrypted")
215
  os.makedirs(encrypted_base_dir, exist_ok=True)
216
 
217
+ # 既存の暗号フォルダを削除
218
+ before_set = set(os.listdir(encrypted_base_dir))
219
+ for item in before_set:
220
  item_path = os.path.join(encrypted_base_dir, item)
221
  try:
222
  if os.path.isfile(item_path):
 
227
  except Exception as e:
228
  logger.warning(f"[CLEANUP] Failed to remove {item_path}: {e}")
229
 
230
+ # === (1) rclone copy local_folder => cryptLocal: ===
231
+ # これにより /home/user/app/encrypted/<ランダム暗号フォルダ> が作成される
 
 
 
 
 
 
 
 
 
232
  try:
233
  subprocess.run(
234
+ ["rclone", "copy", local_folder, "cryptLocal:", "--create-empty-src-dirs"],
 
 
 
 
 
235
  check=True
236
  )
237
+ logger.info(f"[OK] rclone copy {local_folder} => cryptLocal:")
238
  except subprocess.CalledProcessError as e:
239
  logger.error(f"rclone copy failed: {e}")
240
  return None
241
 
242
+ # === (2) 差分検知: 新しく生成された暗号フォルダ名を取得 ===
243
+ after_set = set(os.listdir(encrypted_base_dir))
244
+ diff = after_set - before_set
245
+ if not diff:
246
+ logger.error("[ERROR] No new directory appeared in ./encrypted after rclone copy.")
247
  return None
248
+ if len(diff) > 1:
249
+ logger.warning(f"[WARN] Multiple new directories created: {diff}")
250
+
251
+ enc_folder_name = diff.pop() # 1個だけ取り出す
252
  enc_folder_path = os.path.join(encrypted_base_dir, enc_folder_name)
253
 
254
  if not os.path.isdir(enc_folder_path):
255
  logger.error(f"[ERROR] {enc_folder_path} is not a directory.")
256
  return None
257
 
258
+ # === (3) Hugging Face にアップロード ===
259
+ # path_in_repo も "enc_folder_name" をそのまま使う
260
  try:
261
+ self.upload_folder(enc_folder_path, path_in_repo=enc_folder_name)
262
  logger.info(f"[OK] Uploaded encrypted folder: {enc_folder_path}")
263
  except Exception as e:
264
  logger.error(f"Failed to upload encrypted folder {enc_folder_path}: {e}")
265
 
266
+ # === (4) ローカル削除 (平文フォルダ + 暗号化フォルダ)
267
  try:
268
  shutil.rmtree(local_folder)
269
  shutil.rmtree(enc_folder_path)
 
271
  except Exception as e:
272
  logger.warning(f"[CLEANUP] Could not remove local folders: {e}")
273
 
274
+ # === (5) 実際の暗号フォルダ名を返す
275
+ return enc_folder_name
276
 
277
  def upload_file(self, file_path: str, repo_id: Optional[str] = None, path_in_repo: Optional[str] = None):
278
  if repo_id is None: