222 lines
6.6 KiB
Python
Executable File
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)
|