Code source de services.api_ihm.src.database.config

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

Configuration de l'application Flask pour différents environnements.

Ce module définit les configurations pour les différents environnements
de l'application (développement, production, test). Il gère:
- Les paramètres de connexion aux bases de données
- Les clés secrètes et variables d'environnement
- Les options spécifiques à chaque environnement

Architecture:
------------
1. Configuration de base:
   - Paramètres communs à tous les environnements
   - Gestion des clés secrètes
   - Options SQLAlchemy globales

2. Configurations spécifiques:
   - Développement: SQLite local
   - Production: PostgreSQL
   - Test: SQLite en mémoire

3. Gestion des chemins:
   - Chemins absolus pour les fichiers
   - Support multi-plateformes
   - Structure du projet

Utilisation:
-----------
    from database.config import config
    app.config.from_object(config['development'])

Dépendances:
-----------
    - os : Variables d'environnement
    - pathlib : Gestion des chemins
    - dotenv : Chargement des variables d'environnement
"""

import os
from pathlib import Path
from dotenv import load_dotenv

load_dotenv()

# Obtenir le chemin absolu du dossier src
BASE_DIR = Path(__file__).parent.parent.resolve()


[docs] class Config: """ Configuration de base commune à tous les environnements. """ SECRET_KEY = os.getenv('FLASK_SECRET_KEY', 'dev_key') SQLALCHEMY_TRACK_MODIFICATIONS = False SQLALCHEMY_ENGINE_OPTIONS = { 'pool_pre_ping': True, 'pool_recycle': 300, }
[docs] class DevelopmentConfig(Config): """ Configuration pour l'environnement de développement. """ db_path = str(BASE_DIR / 'database' / 'db.sqlite') SQLALCHEMY_DATABASE_URI = f'sqlite:///{db_path}' DEBUG = True
[docs] class ProductionConfig(Config): """ Configuration pour l'environnement de production. """
[docs] def __init__(self): super().__init__() db_path = str(Path(__file__).parent / 'db.sqlite') self.SQLALCHEMY_DATABASE_URI = f'sqlite:///{db_path}'
[docs] class TestingConfig(Config): """ Configuration pour l'environnement de test. """ SQLALCHEMY_DATABASE_URI = 'sqlite:///:memory:' TESTING = True
# Dictionnaire des configurations disponibles config = { 'development': lambda: DevelopmentConfig(), # Configuration de développement local 'production': lambda: ProductionConfig(), # Configuration de production 'testing': lambda: TestingConfig(), # Configuration pour les tests 'default': lambda: DevelopmentConfig() # Configuration par défaut }