""" Configuration de la connexion à la base de données PostgreSQL. Utilise SQLAlchemy comme ORM et lit l'URL depuis le fichier .env. Si DATABASE_URL n'est pas définie (ex: conteneur Docker sans PostgreSQL), le module ne génère pas d'erreur. Les fonctions de logging détecteront l'absence de DB et fonctionneront en mode dégradé. """ import logging import os from dotenv import load_dotenv from sqlalchemy import create_engine from sqlalchemy.orm import DeclarativeBase, sessionmaker logger = logging.getLogger(__name__) # Charge les variables d'environnement depuis le fichier .env load_dotenv() # URL de connexion à la base de données DATABASE_URL = os.getenv("DATABASE_URL") if DATABASE_URL is None: logger.warning( "DATABASE_URL n'est pas définie. " "La base de données ne sera pas disponible. " "L'API fonctionnera sans logging en base de données." ) engine = None SessionLocal = None else: # Engine SQLAlchemy = connexion vers PostgreSQL engine = create_engine(DATABASE_URL) # SessionLocal = fabrique de sessions (une session = une transaction DB) SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) # Base = classe de base pour tous les modèles ORM class Base(DeclarativeBase): pass def get_db(): """ Générateur qui fournit une session de base de données. Yields: Session SQLAlchemy ou None si la DB n'est pas configurée """ if SessionLocal is None: yield None return db = SessionLocal() try: yield db finally: db.close()