""" 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()