#!/usr/bin/env python3 """ Script de vérification de la configuration. Vérifie que tous les prérequis sont installés et que la BDD est accessible. """ import os import sys def check_imports(): """Vérifie que tous les modules Python nécessaires sont installés""" print("🔍 Vérification des modules Python...") modules = [ ("flask", "Flask"), ("flask_jwt_extended", "Flask-JWT-Extended"), ] missing = [] for module_name, display_name in modules: try: __import__(module_name) print(f" ✅ {display_name}") except ImportError: print(f" ❌ {display_name} manquant") missing.append(display_name) db_type = os.getenv("DB_TYPE", "mariadb") if db_type == "sqlite": try: import sqlite3 print(f" ✅ sqlite3") except ImportError: print(f" ❌ sqlite3 manquant") missing.append("sqlite3") else: try: import mysql.connector print(f" ✅ mysql-connector-python") except ImportError: print(f" ❌ mysql-connector-python manquant") missing.append("mysql-connector-python") return missing def check_database(): """Vérifie la connexion à la base de données""" print("\n🔍 Vérification de la base de données...") db_type = os.getenv("DB_TYPE", "mariadb") print(f" Type de BDD: {db_type}") try: from bdd.database import get_database with get_database() as db: # Tester une requête simple result = db.fetchone("SELECT 1") if result: print(f" ✅ Connexion à la BDD réussie ({db_type})") return True else: print(f" ❌ Connexion à la BDD échouée") return False except Exception as e: print(f" ❌ Erreur de connexion: {e}") return False def check_tables(): """Vérifie que les tables existent""" print("\n🔍 Vérification des tables...") try: from bdd.database import get_database tables = ["Users", "UE", "Matieres", "Notes"] with get_database() as db: db_type = os.getenv("DB_TYPE", "mariadb") for table in tables: try: if db_type == "sqlite": result = db.fetchone( f"SELECT name FROM sqlite_master WHERE type='table' AND name='{table}'" ) else: result = db.fetchone( f"SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME='{table}'" ) if result: print(f" ✅ Table {table}") else: print(f" ❌ Table {table} manquante") except Exception as e: print(f" ❌ Erreur sur table {table}: {e}") return False return True except Exception as e: print(f" ❌ Erreur: {e}") return False def check_test_data(): """Vérifie que les données de test existent""" print("\n🔍 Vérification des données de test...") try: from bdd.database import get_database with get_database() as db: ph = db.backend.get_placeholder() # Vérifier qu'il y a un prof prof = db.fetchone(f"SELECT * FROM Users WHERE role={ph}", ("prof",)) if prof: print(f" ✅ Compte professeur trouvé") else: print(f" ⚠️ Aucun compte professeur") # Vérifier qu'il y a des élèves eleves = db.fetchall(f"SELECT * FROM Users WHERE role={ph}", ("eleve",)) if eleves: print(f" ✅ {len(eleves)} compte(s) élève(s) trouvé(s)") else: print(f" ⚠️ Aucun compte élève") # Vérifier qu'il y a des UE ues = db.fetchall("SELECT * FROM UE") if ues: print(f" ✅ {len(ues)} UE trouvée(s)") else: print(f" ⚠️ Aucune UE") # Vérifier qu'il y a des matières matieres = db.fetchall("SELECT * FROM Matieres") if matieres: print(f" ✅ {len(matieres)} matière(s) trouvée(s)") else: print(f" ⚠️ Aucune matière") return True except Exception as e: print(f" ❌ Erreur: {e}") return False def check_env(): """Vérifie les variables d'environnement""" print("\n🔍 Vérification des variables d'environnement...") db_type = os.getenv("DB_TYPE", "mariadb") print(f" DB_TYPE: {db_type}") if db_type == "sqlite": db_path = os.getenv("SQLITE_DB_PATH", "cours.db") print(f" SQLITE_DB_PATH: {db_path}") else: print(f" DB_HOST: {os.getenv('DB_HOST', 'mariadb')}") print(f" DB_USER: {os.getenv('DB_USER', 'root')}") print(f" DB_NAME: {os.getenv('DB_NAME', 'APPNOTE')}") def main(): print("=" * 60) print("🔧 Vérification de la Configuration") print("=" * 60) check_env() missing = check_imports() if missing: print(f"\n❌ Modules manquants: {', '.join(missing)}") print(f" Installez-les avec: pip install {' '.join(missing)}") return False if not check_database(): print("\n❌ Impossible de se connecter à la base de données") print(" Assurez-vous que:") db_type = os.getenv("DB_TYPE", "mariadb") if db_type == "sqlite": print(" - La base SQLite existe (lancez ./init_db.sh sqlite)") else: print(" - MariaDB est démarré (docker-compose up -d mariadb)") print(" - La base est initialisée (./init_db.sh mariadb)") return False if not check_tables(): print("\n❌ Certaines tables sont manquantes") print(" Réinitialisez la base avec: ./init_db.sh") return False check_test_data() print("\n" + "=" * 60) print("✅ Configuration OK ! Vous pouvez lancer l'application:") print(" python app.py") print(" ou: ./run.sh") print("=" * 60) return True if __name__ == "__main__": try: success = main() sys.exit(0 if success else 1) except KeyboardInterrupt: print("\n\n⚠️ Interrompu par l'utilisateur") sys.exit(1) except Exception as e: print(f"\n\n❌ Erreur inattendue: {e}") sys.exit(1)