Code source de services.api_ihm.src.__init__

"""
Module d'initialisation de l'API IHM.

Ce module initialise l'application Flask et configure les différents composants :
- Base de données
- Authentification
- Blueprints

Version: 1.0.1 (2023-12-20)
Auteur: Kahina et franck - Groupe 2
Commit: bigmoletos@yopmail.com
"""

import os
from pathlib import Path
from flask import Flask
from flask_login import LoginManager
from .database.models import db, User
from .auth.routes import auth_bp
from .main.routes import main_bp
import logging

# Configuration du logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)


[docs] def create_app(): app = Flask(__name__) # Configuration base_dir = Path(__file__).parent.resolve() # Chemin absolu db_path = base_dir / 'database' / 'db.sqlite' logger.info(f"Chemin de base: {base_dir}") logger.info(f"Chemin de la base de données: {db_path}") # Création du dossier database s'il n'existe pas try: db_path.parent.mkdir(exist_ok=True, parents=True) logger.info(f"Dossier database créé/vérifié: {db_path.parent}") logger.info( f"Permissions du dossier: {oct(db_path.parent.stat().st_mode)[-3:]}" ) except Exception as e: logger.error(f"Erreur lors de la création du dossier database: {e}") raise # Configuration de la base de données app.config['SQLALCHEMY_DATABASE_URI'] = f'sqlite:///{db_path}' app.config['SECRET_KEY'] = os.getenv('FLASK_SECRET_KEY', 'dev_key') app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False logger.info( f"URI de la base de données: {app.config['SQLALCHEMY_DATABASE_URI']}") # Extensions db.init_app(app) login_manager = LoginManager() login_manager.init_app(app) login_manager.login_view = 'auth.login' @login_manager.user_loader def load_user(user_id): return User.query.get(int(user_id)) # Initialisation de la base de données with app.app_context(): try: if not db_path.exists(): db.create_all() logger.info(f"Base de données créée avec succès à {db_path}") logger.info( f"Permissions du fichier: {oct(db_path.stat().st_mode)[-3:]}" ) else: logger.info(f"Base de données existante à {db_path}") logger.info( f"Permissions du fichier: {oct(db_path.stat().st_mode)[-3:]}" ) # Vérifier que les tables sont bien créées tables = db.engine.table_names() logger.info(f"Tables dans la base de données: {tables}") except Exception as e: logger.error( f"Erreur lors de l'initialisation de la base de données : {e}") raise # Blueprints app.register_blueprint(auth_bp, url_prefix='/auth') app.register_blueprint(main_bp) return app