ProjetVM/check_setup.py
2025-12-08 14:18:02 +01:00

222 lines
6.6 KiB
Python
Executable File

#!/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)