#!/usr/bin/env python3 """ Test-Setup für Batch Uploader ============================= Erstellt Test-Struktur und führt Validierungs-Tests durch. Neue Struktur: Photos/Jahr/Name/Projekt/dateiname.endung """ import os import sys from pathlib import Path import tempfile import shutil from PIL import Image import logging # Test-Setup TEST_DIR = Path("test_images") BACKEND_URL = "http://localhost:5000" def create_test_image(path: Path, size=(800, 600), color=(255, 0, 0)): """Erstellt ein Test-Bild""" path.parent.mkdir(parents=True, exist_ok=True) img = Image.new('RGB', size, color) img.save(path, 'JPEG', quality=85) print(f"✅ Erstellt: {path}") def setup_test_structure(): """Erstellt Test-Verzeichnis-Struktur mit Beispielbildern Neue Struktur: Photos/Jahr/Name/Projekt/dateiname.endung """ print("🏗️ Erstelle Test-Struktur (Photos/Jahr/Name/Projekt/)...") # Test-Struktur nach neuem Schema test_structure = { "2024/Max_Mustermann/Urlaub_Mallorca": [ ("sonnenuntergang.jpg", (1200, 800), (255, 165, 0)), ("strand_spaziergang.jpg", (800, 600), (135, 206, 235)), ("hotel_pool.jpg", (800, 600), (0, 191, 255)) ], "2024/Max_Mustermann/Hochzeit_Anna": [ ("zeremonie.jpg", (1000, 750), (255, 182, 193)), ("torte.jpg", (600, 600), (139, 69, 19)), ("party.jpg", (800, 600), (255, 215, 0)) ], "2024/Anna_Schmidt/Architektur_Berlin": [ ("brandenburger_tor.jpg", (1000, 750), (128, 128, 128)), ("reichstag.jpg", (800, 600), (70, 70, 70)), ("potsdamer_platz.jpg", (900, 600), (105, 105, 105)) ], "2023/Familie_Mueller/Weihnachten": [ ("weihnachtsbaum.jpg", (800, 600), (34, 139, 34)), ("geschenke.jpg", (600, 600), (255, 0, 0)), ("familienfoto.jpg", (800, 600), (255, 192, 203)) ], "2023/Thomas_Weber/Business_Trip": [ ("konferenz.jpg", (800, 600), (0, 0, 139)), ("networking.jpg", (700, 500), (25, 25, 112)) ] } # README-Inhalte für Projekte readme_contents = { "2024/Max_Mustermann/Urlaub_Mallorca": "Traumhafter Urlaub auf Mallorca mit Sonne, Strand und entspannten Momenten am Pool.", "2024/Max_Mustermann/Hochzeit_Anna": "Unvergessliche Hochzeitsfeier von Anna und Max mit wunderschöner Zeremonie und ausgelassener Party.", "2024/Anna_Schmidt/Architektur_Berlin": "Architektonische Highlights Berlins - eine fotografische Reise durch die Hauptstadt.", "2023/Familie_Mueller/Weihnachten": "Besinnliche Weihnachtszeit mit der ganzen Familie, Geschenken und traditionellem Fest.", "2023/Thomas_Weber/Business_Trip": "Geschäftsreise mit wichtigen Meetings, Konferenzen und wertvollen Networking-Gelegenheiten." } # Erstelle Struktur mit README-Dateien for dir_path, images in test_structure.items(): # Verzeichnis erstellen full_dir_path = TEST_DIR / dir_path full_dir_path.mkdir(parents=True, exist_ok=True) # README.md erstellen wenn Inhalt vorhanden if dir_path in readme_contents: readme_path = full_dir_path / "README.md" with open(readme_path, 'w', encoding='utf-8') as f: f.write(f"# {dir_path.split('/')[-1].replace('_', ' ')}\n\n") f.write(readme_contents[dir_path] + "\n\n") f.write("## Details\n") f.write(f"- Jahr: {dir_path.split('/')[0]}\n") f.write(f"- Fotograf: {dir_path.split('/')[1].replace('_', ' ')}\n") f.write(f"- Projekt: {dir_path.split('/')[2].replace('_', ' ')}\n") print(f"📄 README erstellt: {readme_path}") # Bilder erstellen for image_name, size, color in images: image_path = full_dir_path / image_name create_test_image(image_path, size, color) print(f"📁 Test-Struktur erstellt in: {TEST_DIR.absolute()}") return TEST_DIR def show_test_structure(): """Zeigt die erstellte Test-Struktur""" print("\n📁 Test-Struktur (Photos/Jahr/Name/Projekt/):") print("test_images/") for root, dirs, files in os.walk(TEST_DIR): level = root.replace(str(TEST_DIR), '').count(os.sep) indent = ' ' * 2 * level subindent = ' ' * 2 * (level + 1) if level > 0: print(f"{indent}├── {os.path.basename(root)}/") for file in sorted(files): icon = "📄" if file == "README.md" else "📸" if file.endswith(('.jpg', '.jpeg', '.png')) or file == "README.md": print(f"{subindent}├── {icon} {file}") def run_test_commands(): """Zeigt Test-Kommandos""" print(f"\n🧪 Test-Kommandos:") print(f"cd {Path.cwd()}") print() credentials = "--user admin --password 'SehrSicher123!'" commands = [ "# 1. Dry-Run Test (Neue Struktur)", f"python3 batch_uploader.py {TEST_DIR} --dry-run --verbose", "", "# 2. Einzelnes Projekt testen", f"python3 batch_uploader.py {TEST_DIR}/2024/Max_Mustermann/Urlaub_Mallorca --titel \"Mallorca Test\" {credentials}", "", "# 3. Vollständiger Upload (Neue Struktur)", f"python3 batch_uploader.py {TEST_DIR} --titel \"Test Sammlung\" --name \"Test User\" --verbose {credentials}", "", "# 4. Backend Status prüfen", "curl http://localhost:5000/api/groups", "", "# 5. Struktur-Test für spezifischen Namen", f"python3 batch_uploader.py {TEST_DIR}/2024/Anna_Schmidt --dry-run --verbose" ] for cmd in commands: print(cmd) def main(): """Haupt-Test-Setup""" if len(sys.argv) > 1 and sys.argv[1] == "--clean": if TEST_DIR.exists(): shutil.rmtree(TEST_DIR) print(f"🧹 {TEST_DIR} gelöscht") return # Setup setup_test_structure() show_test_structure() run_test_commands() print(f"\n✅ Test-Setup abgeschlossen!") print(f"💡 Starte Backend mit: cd .. && ./prod.sh") print(f"💡 Dann teste mit einem der obigen Kommandos") print(f"💡 Cleanup mit: python3 test_setup.py --clean") if __name__ == "__main__": main()