"""
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
}