174 lines
6.7 KiB
Python
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()
|