Files
lego-instructions-manager/cleanup_folders.py

174 lines
6.7 KiB
Python

"""
Cleanup and Verification Script
This script will:
1. Check for duplicate upload folders
2. Move files to correct location
3. Clean up duplicate folders
4. Verify everything is in the right place
"""
import os
import shutil
import glob
def cleanup_and_verify():
"""Clean up duplicate folders and verify correct structure."""
print("="*70)
print("LEGO Instructions Manager - Cleanup & Verification")
print("="*70)
print()
base_dir = os.path.dirname(os.path.abspath(__file__))
# Correct location
correct_uploads = os.path.join(base_dir, 'app', 'static', 'uploads')
# Duplicate location (the problem)
duplicate_uploads = os.path.join(base_dir, 'app', 'app', 'static', 'uploads')
print("Checking for duplicate folders...")
print(f"Correct location: {correct_uploads}")
print(f"Duplicate location: {duplicate_uploads}")
print()
# Check if duplicate exists
if os.path.exists(duplicate_uploads):
print("⚠️ DUPLICATE FOLDER FOUND!")
print(f"Found: {duplicate_uploads}")
print()
# Count files in duplicate
covers_in_duplicate = os.path.join(duplicate_uploads, 'covers')
if os.path.exists(covers_in_duplicate):
file_count = 0
for root, dirs, files in os.walk(covers_in_duplicate):
file_count += len(files)
print(f"Files in duplicate location: {file_count}")
if file_count > 0:
print()
print("🔄 Moving files to correct location...")
# Ensure correct location exists
os.makedirs(correct_uploads, exist_ok=True)
correct_covers = os.path.join(correct_uploads, 'covers')
os.makedirs(correct_covers, exist_ok=True)
# Move all set folders
for set_folder in os.listdir(covers_in_duplicate):
src_folder = os.path.join(covers_in_duplicate, set_folder)
dst_folder = os.path.join(correct_covers, set_folder)
if os.path.isdir(src_folder):
if os.path.exists(dst_folder):
print(f" Merging: {set_folder}")
# Merge folders
for file in os.listdir(src_folder):
src_file = os.path.join(src_folder, file)
dst_file = os.path.join(dst_folder, file)
if not os.path.exists(dst_file):
shutil.copy2(src_file, dst_file)
print(f" Moved: {file}")
else:
print(f" Moving: {set_folder}")
shutil.copytree(src_folder, dst_folder)
print("✅ Files moved successfully!")
print()
print("🗑️ Removing duplicate folder structure...")
# Remove the duplicate app/app folder
duplicate_app_folder = os.path.join(base_dir, 'app', 'app')
try:
shutil.rmtree(duplicate_app_folder)
print(f"✅ Removed: {duplicate_app_folder}")
except Exception as e:
print(f"⚠️ Could not remove: {e}")
print(f" Please manually delete: {duplicate_app_folder}")
else:
print("✅ No duplicate folder found - structure is correct!")
print()
print("="*70)
print("Verifying correct structure...")
print("="*70)
print()
# Verify correct structure
if os.path.exists(correct_uploads):
print(f"✅ Uploads folder exists: {correct_uploads}")
# Check subdirectories
covers = os.path.join(correct_uploads, 'covers')
images = os.path.join(correct_uploads, 'images')
pdfs = os.path.join(correct_uploads, 'pdfs')
for folder, name in [(covers, 'covers'), (images, 'images'), (pdfs, 'pdfs')]:
if os.path.exists(folder):
file_count = sum([len(files) for _, _, files in os.walk(folder)])
print(f"{name:8} folder exists - {file_count} file(s)")
else:
print(f"⚠️ {name:8} folder missing - creating...")
os.makedirs(folder, exist_ok=True)
print(f"✅ Created: {folder}")
# List cover images
print()
print("Cover images found:")
covers_path = os.path.join(correct_uploads, 'covers')
if os.path.exists(covers_path):
set_folders = [f for f in os.listdir(covers_path) if os.path.isdir(os.path.join(covers_path, f))]
if set_folders:
for set_folder in sorted(set_folders):
files = os.listdir(os.path.join(covers_path, set_folder))
print(f" {set_folder}: {len(files)} image(s)")
else:
print(" No cover images uploaded yet")
else:
print(f"❌ Uploads folder does NOT exist: {correct_uploads}")
print("Creating it now...")
os.makedirs(correct_uploads, exist_ok=True)
os.makedirs(os.path.join(correct_uploads, 'covers'), exist_ok=True)
os.makedirs(os.path.join(correct_uploads, 'images'), exist_ok=True)
os.makedirs(os.path.join(correct_uploads, 'pdfs'), exist_ok=True)
print("✅ Created upload folder structure")
print()
print("="*70)
print("Configuration Check")
print("="*70)
print()
# Check config.py
config_path = os.path.join(base_dir, 'app', 'config.py')
if os.path.exists(config_path):
with open(config_path, 'r') as f:
config_content = f.read()
if "basedir, 'static', 'uploads'" in config_content:
print("✅ config.py has correct UPLOAD_FOLDER path")
elif "basedir, 'app', 'static', 'uploads'" in config_content:
print("❌ config.py has INCORRECT path (includes 'app')")
print(" Please update config.py:")
print(" Change: os.path.join(basedir, 'app', 'static', 'uploads')")
print(" To: os.path.join(basedir, 'static', 'uploads')")
else:
print("⚠️ Could not verify config.py UPLOAD_FOLDER")
print()
print("="*70)
print("✅ Cleanup and verification complete!")
print("="*70)
print()
print("Next steps:")
print("1. Restart Flask: python run.py")
print("2. Test image uploads")
print("3. Verify images display correctly")
print()
if __name__ == "__main__":
cleanup_and_verify()