ttttdiva commited on
Commit
ffc0039
·
verified ·
1 Parent(s): 5072eca

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +43 -4
main.py CHANGED
@@ -234,6 +234,14 @@ class CivitAICrawler:
234
  logger.error(f"Failed to retrieve model info for ID {model_id}: {e}")
235
 
236
  def download_model(self, model_versions: list, folder: str, existing_old_version_files: list = []):
 
 
 
 
 
 
 
 
237
  latest_version = model_versions[0]
238
  latest_files = latest_version["files"]
239
  for file_info in latest_files:
@@ -267,16 +275,23 @@ class CivitAICrawler:
267
  except Exception as e:
268
  logger.error(f"Failed to create dummy file for {file_name}: {e}")
269
 
270
- # 古いバージョンのダウンロード
 
 
271
  if len(model_versions) > 1:
272
  old_versions_folder = os.path.join(folder, "old_versions")
273
  os.makedirs(old_versions_folder, exist_ok=True)
 
 
274
  for version in model_versions[1:]:
275
  for file_info in version["files"]:
276
  file_name = file_info["name"]
 
 
277
  if file_name in existing_old_version_files:
278
  logger.info(f"Skipping download of existing old version file: {file_name}")
279
  continue
 
280
  download_url = file_info["downloadUrl"]
281
  local_file_path = os.path.join(old_versions_folder, file_name)
282
  login_detected_count = 0
@@ -291,21 +306,45 @@ class CivitAICrawler:
291
 
292
  if "login" in os.listdir(old_versions_folder):
293
  login_detected_count += 1
294
- logger.warning(f"'login' file found while downloading {file_name}. Will try again. ({login_detected_count}/5)")
 
 
 
295
  os.remove(os.path.join(old_versions_folder, "login"))
296
  else:
297
- logger.info(f"Successfully downloaded {file_name}")
298
  break
299
 
 
300
  if login_detected_count >= 5:
301
  dummy_file_name = f"{file_name}.download_failed"
302
  dummy_file_path = os.path.join(old_versions_folder, dummy_file_name)
303
  try:
304
  with open(dummy_file_path, "w") as f:
305
  f.write("Download failed after 5 attempts.")
306
- logger.error(f"Failed to download {file_name}. Created dummy file {dummy_file_name}. URL: {download_url}")
 
 
307
  except Exception as e:
308
  logger.error(f"Failed to create dummy file for {file_name}: {e}")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
309
 
310
  def download_images(self, model_versions: list, folder: str):
311
  images_folder = os.path.join(folder, "images")
 
234
  logger.error(f"Failed to retrieve model info for ID {model_id}: {e}")
235
 
236
  def download_model(self, model_versions: list, folder: str, existing_old_version_files: list = []):
237
+ """
238
+ 指定された model_versions (list) から
239
+ - 最新バージョン(先頭要素)のファイルを一括ダウンロード
240
+ - 古いバージョン (index=1以降) のファイルは1つずつダウンロード後に即アップロード・削除
241
+ """
242
+ # ----------------------
243
+ # 1) 最新バージョンのダウンロード (従来通り)
244
+ # ----------------------
245
  latest_version = model_versions[0]
246
  latest_files = latest_version["files"]
247
  for file_info in latest_files:
 
275
  except Exception as e:
276
  logger.error(f"Failed to create dummy file for {file_name}: {e}")
277
 
278
+ # ----------------------
279
+ # 2) 古いバージョンのダウンロード → すぐアップロード&削除
280
+ # ----------------------
281
  if len(model_versions) > 1:
282
  old_versions_folder = os.path.join(folder, "old_versions")
283
  os.makedirs(old_versions_folder, exist_ok=True)
284
+
285
+ # ### ここから修正 ###
286
  for version in model_versions[1:]:
287
  for file_info in version["files"]:
288
  file_name = file_info["name"]
289
+
290
+ # 既にアップロード済み (existing_old_version_files) の場合はスキップ
291
  if file_name in existing_old_version_files:
292
  logger.info(f"Skipping download of existing old version file: {file_name}")
293
  continue
294
+
295
  download_url = file_info["downloadUrl"]
296
  local_file_path = os.path.join(old_versions_folder, file_name)
297
  login_detected_count = 0
 
306
 
307
  if "login" in os.listdir(old_versions_folder):
308
  login_detected_count += 1
309
+ logger.warning(
310
+ f"'login' file found while downloading {file_name}. Will try again. "
311
+ f"({login_detected_count}/5)"
312
+ )
313
  os.remove(os.path.join(old_versions_folder, "login"))
314
  else:
315
+ logger.info(f"Successfully downloaded old version file: {file_name}")
316
  break
317
 
318
+ # ダウンロードが5回失敗した場合はダミーを作って終了
319
  if login_detected_count >= 5:
320
  dummy_file_name = f"{file_name}.download_failed"
321
  dummy_file_path = os.path.join(old_versions_folder, dummy_file_name)
322
  try:
323
  with open(dummy_file_path, "w") as f:
324
  f.write("Download failed after 5 attempts.")
325
+ logger.error(
326
+ f"Failed to download {file_name}. Created dummy file {dummy_file_name}. URL: {download_url}"
327
+ )
328
  except Exception as e:
329
  logger.error(f"Failed to create dummy file for {file_name}: {e}")
330
+ # 失敗時はアップロードせずに次のファイルへ
331
+ continue
332
+
333
+ # ダウンロードに成功した場合:
334
+ # 1ファイルごとに暗号化してアップロードし、アップ後に削除
335
+ try:
336
+ # 例: path_in_repo はフォルダ構成したいなら "old_versions/..." とか
337
+ # ここではフォルダ名=folder名/old_versions としておく
338
+ self.upload_file_encrypted(
339
+ file_path=local_file_path,
340
+ path_in_repo=f"{folder}/old_versions/{file_name}"
341
+ )
342
+ # アップロードが問題なく完了したので削除
343
+ os.remove(local_file_path)
344
+ logger.info(f"Removed local old version file: {local_file_path}")
345
+ except Exception as e:
346
+ logger.error(f"Error uploading and removing old version file {local_file_path}: {e}")
347
+ # ### ここまで修正 ###
348
 
349
  def download_images(self, model_versions: list, folder: str):
350
  images_folder = os.path.join(folder, "images")