#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Script de Démarrage Backend VWB - Version Finale Auteur : Dom, Alice, Kiro - 09 janvier 2026 Ce script démarre le backend Flask avec toutes les API connectées sur le port 5003 pour correspondre au frontend. """ import os import sys import subprocess import time from pathlib import Path # Ajouter le répertoire racine au path ROOT_DIR = Path(__file__).parent.parent sys.path.insert(0, str(ROOT_DIR)) def check_dependencies(): """Vérifier les dépendances critiques""" print("🔍 Vérification des dépendances...") dependencies = [ ('flask', 'Flask'), ('flask_cors', 'Flask-CORS'), ('mss', 'MSS (capture d\'écran)'), ('PIL', 'Pillow (traitement d\'images)'), ('numpy', 'NumPy'), ('requests', 'Requests'), ] missing = [] for module, name in dependencies: try: __import__(module) print(f"✅ {name}") except ImportError: print(f"❌ {name} - MANQUANT") missing.append(name) if missing: print(f"\n⚠️ Dépendances manquantes: {', '.join(missing)}") print("Installez-les avec: pip install flask flask-cors mss pillow numpy requests") return False print("✅ Toutes les dépendances sont présentes") return True def check_port_availability(port): """Vérifier si le port est disponible""" import socket try: with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.bind(('localhost', port)) return True except OSError: return False def start_backend(): """Démarrer le backend Flask""" print("🚀 Démarrage du backend VWB...") # Définir les variables d'environnement env = os.environ.copy() env['PORT'] = '5003' env['FLASK_ENV'] = 'development' env['PYTHONPATH'] = str(ROOT_DIR) # Chemin vers le script backend backend_script = ROOT_DIR / "visual_workflow_builder" / "backend" / "app_lightweight.py" if not backend_script.exists(): print(f"❌ Script backend non trouvé: {backend_script}") return False # Vérifier la disponibilité du port if not check_port_availability(5003): print("⚠️ Le port 5003 est déjà utilisé") print("Tentative d'arrêt du processus existant...") # Essayer de tuer le processus sur le port 5003 try: subprocess.run(['pkill', '-f', 'app_lightweight.py'], check=False) time.sleep(2) if check_port_availability(5003): print("✅ Port 5003 libéré") else: print("❌ Impossible de libérer le port 5003") return False except Exception as e: print(f"⚠️ Erreur lors de la libération du port: {e}") print(f"🌐 Démarrage sur http://localhost:5003") print(f"📁 Répertoire de travail: {ROOT_DIR}") print(f"🔧 Script: {backend_script}") print("") print("Endpoints disponibles:") print(" - GET /health - Santé de l'API") print(" - GET /api/workflows - Liste des workflows") print(" - POST /api/workflows - Créer un workflow") print(" - GET /api/workflows/ - Récupérer un workflow") print(" - PUT /api/workflows/ - Mettre à jour un workflow") print(" - DELETE /api/workflows/ - Supprimer un workflow") print(" - POST /api/screen-capture - Capturer l'écran (Option A)") print(" - POST /api/visual-embedding - Créer un embedding visuel") print(" - POST /api/workflow/execute - Exécuter un workflow") print(" - POST /api/workflow/execute-step - Exécuter une étape") print(" - POST /api/workflow/validate - Valider un workflow") print(" - GET /api/stats - Statistiques de l'API") print("") print("Appuyez sur Ctrl+C pour arrêter") print("=" * 60) try: # Démarrer le backend process = subprocess.Popen( [sys.executable, str(backend_script)], env=env, cwd=str(ROOT_DIR), stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True, bufsize=1 ) # Afficher la sortie en temps réel for line in process.stdout: print(line.rstrip()) return process.returncode == 0 except KeyboardInterrupt: print("\n🛑 Arrêt demandé par l'utilisateur") if 'process' in locals(): process.terminate() process.wait() return True except Exception as e: print(f"❌ Erreur lors du démarrage: {e}") return False def main(): """Fonction principale""" print("=" * 60) print(" DÉMARRAGE BACKEND VWB - VERSION FINALE") print("=" * 60) print("Auteur : Dom, Alice, Kiro - 09 janvier 2026") print("") # Vérifier les dépendances if not check_dependencies(): print("\n❌ Impossible de démarrer - dépendances manquantes") return False print("") # Démarrer le backend success = start_backend() if success: print("\n✅ Backend arrêté proprement") else: print("\n❌ Erreur lors du démarrage du backend") return success if __name__ == "__main__": success = main() sys.exit(0 if success else 1)