Update main.py
Browse files
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(
|
|
|
|
|
|
|
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(
|
|
|
|
|
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")
|