Upload main.py
Browse files
main.py
CHANGED
@@ -259,8 +259,14 @@ class CivitAICrawler:
|
|
259 |
shutil.rmtree(single_file_folder)
|
260 |
logger.info(f"Removed temp_single folder {single_file_folder}")
|
261 |
|
262 |
-
# ========== 既存の encrypt_and_upload_folder はそのまま活用 ==========
|
263 |
def encrypt_and_upload_folder(self, local_folder: str) -> Optional[str]:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
264 |
if not os.path.exists(local_folder):
|
265 |
logger.error(f"encrypt_and_upload_folder: folder not found: {local_folder}")
|
266 |
return None
|
@@ -268,7 +274,7 @@ class CivitAICrawler:
|
|
268 |
encrypted_base_dir = os.path.join(os.getcwd(), "encrypted")
|
269 |
os.makedirs(encrypted_base_dir, exist_ok=True)
|
270 |
|
271 |
-
#
|
272 |
for item in os.listdir(encrypted_base_dir):
|
273 |
item_path = os.path.join(encrypted_base_dir, item)
|
274 |
try:
|
@@ -280,19 +286,40 @@ class CivitAICrawler:
|
|
280 |
except Exception as e:
|
281 |
logger.warning(f"[CLEANUP] Failed to remove {item_path}: {e}")
|
282 |
|
|
|
283 |
subfolder_label = "enc_" + str(uuid.uuid4())[:8]
|
|
|
|
|
284 |
try:
|
285 |
subprocess.run(
|
286 |
-
["rclone", "
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
287 |
check=True
|
288 |
)
|
289 |
except subprocess.CalledProcessError as e:
|
290 |
logger.error(f"rclone copy failed: {e}")
|
291 |
return None
|
292 |
|
|
|
293 |
enc_folder_path = os.path.join(encrypted_base_dir, subfolder_label)
|
|
|
294 |
if not os.path.isdir(enc_folder_path):
|
295 |
-
logger.error(f"[ERROR] {enc_folder_path} is not a directory.")
|
296 |
return None
|
297 |
|
298 |
# アップロード
|
|
|
259 |
shutil.rmtree(single_file_folder)
|
260 |
logger.info(f"Removed temp_single folder {single_file_folder}")
|
261 |
|
|
|
262 |
def encrypt_and_upload_folder(self, local_folder: str) -> Optional[str]:
|
263 |
+
"""
|
264 |
+
1. rclone mkdir cryptLocal:subfolder_label で空フォルダを作る
|
265 |
+
2. rclone copy local_folder => cryptLocal:subfolder_label --create-empty-src-dirs
|
266 |
+
3. そのフォルダを self.upload_folder() でアップ
|
267 |
+
4. ローカル平文フォルダ & 暗号フォルダを削除
|
268 |
+
5. subfolder_label を返す
|
269 |
+
"""
|
270 |
if not os.path.exists(local_folder):
|
271 |
logger.error(f"encrypt_and_upload_folder: folder not found: {local_folder}")
|
272 |
return None
|
|
|
274 |
encrypted_base_dir = os.path.join(os.getcwd(), "encrypted")
|
275 |
os.makedirs(encrypted_base_dir, exist_ok=True)
|
276 |
|
277 |
+
# 既存の暗号ファイル削除(不要ならコメントアウト)
|
278 |
for item in os.listdir(encrypted_base_dir):
|
279 |
item_path = os.path.join(encrypted_base_dir, item)
|
280 |
try:
|
|
|
286 |
except Exception as e:
|
287 |
logger.warning(f"[CLEANUP] Failed to remove {item_path}: {e}")
|
288 |
|
289 |
+
# サブフォルダ名を生成(enc_ + UUID)
|
290 |
subfolder_label = "enc_" + str(uuid.uuid4())[:8]
|
291 |
+
|
292 |
+
# ★ 追加: mkdir で先に空ディレクトリを作っておく
|
293 |
try:
|
294 |
subprocess.run(
|
295 |
+
["rclone", "mkdir", f"cryptLocal:{subfolder_label}"],
|
296 |
+
check=True
|
297 |
+
)
|
298 |
+
except subprocess.CalledProcessError as e:
|
299 |
+
logger.error(f"rclone mkdir failed: {e}")
|
300 |
+
return None
|
301 |
+
|
302 |
+
# ★ --create-empty-src-dirs オプションを付けて copy
|
303 |
+
try:
|
304 |
+
subprocess.run(
|
305 |
+
[
|
306 |
+
"rclone",
|
307 |
+
"copy",
|
308 |
+
local_folder,
|
309 |
+
f"cryptLocal:{subfolder_label}",
|
310 |
+
"--create-empty-src-dirs"
|
311 |
+
],
|
312 |
check=True
|
313 |
)
|
314 |
except subprocess.CalledProcessError as e:
|
315 |
logger.error(f"rclone copy failed: {e}")
|
316 |
return None
|
317 |
|
318 |
+
# 暗号フォルダのパス(必ずディレクトリができている前提)
|
319 |
enc_folder_path = os.path.join(encrypted_base_dir, subfolder_label)
|
320 |
+
|
321 |
if not os.path.isdir(enc_folder_path):
|
322 |
+
logger.error(f"[ERROR] {enc_folder_path} is not a directory, something is still off.")
|
323 |
return None
|
324 |
|
325 |
# アップロード
|