Files
scan-ocr-cheques/api/app/config.py
2025-07-09 06:40:36 +02:00

78 lines
3.0 KiB
Python

"""
Configuration de l'API Cheque Scanner
"""
import os
from pydantic_settings import BaseSettings
from dotenv import load_dotenv
# Charger les variables d'environnement depuis le fichier .env
load_dotenv()
class Settings(BaseSettings):
"""Configuration de l'application"""
# Informations de base
APP_NAME: str = "Cheque Scanner API"
API_VERSION: str = "v1"
API_PREFIX: str = f"/api/{API_VERSION}"
DEBUG: bool = os.getenv("DEBUG", "False").lower() == "true"
# Sécurité
API_KEY: str = os.getenv("API_KEY", "your-secret-api-key")
# Configuration du serveur
HOST: str = os.getenv("HOST", "0.0.0.0")
PORT: int = int(os.getenv("PORT", "8000"))
# Configuration Redis
REDIS_HOST: str = os.getenv("REDIS_HOST", "redis")
REDIS_PORT: int = int(os.getenv("REDIS_PORT", "6379"))
REDIS_DB: int = int(os.getenv("REDIS_DB", "0"))
REDIS_URL: str = os.getenv("REDIS_URL", f"redis://{REDIS_HOST}:{REDIS_PORT}/{REDIS_DB}")
# Configuration des files d'attente
QUEUE_NAME: str = os.getenv("QUEUE_NAME", "cheque_processing")
HIGH_PRIORITY_QUEUE_NAME: str = os.getenv("HIGH_PRIORITY_QUEUE_NAME", "cheque_processing_high")
# Configuration du stockage
UPLOAD_FOLDER: str = os.getenv("UPLOAD_FOLDER", "/app/data/uploads")
RESULT_FOLDER: str = os.getenv("RESULT_FOLDER", "/app/data/results")
TEMP_FOLDER: str = os.getenv("TEMP_FOLDER", "/app/data/tmp")
CONVERTED_FOLDER: str = os.getenv("CONVERTED_FOLDER", "/app/data/converted")
MAX_CONTENT_LENGTH: int = int(os.getenv("MAX_CONTENT_LENGTH", "16777216")) # 16MB
ALLOWED_EXTENSIONS: set = {"png", "jpg", "jpeg", "gif", "tiff", "pdf"}
# Formats modernes (nécessitant conversion)
MODERN_EXTENSIONS: set = {"heic", "heif", "webp", "dng", "cr2", "arw", "nef", "raw"}
# Configuration de conversion
CONVERSION_QUALITY: int = int(os.getenv("CONVERSION_QUALITY", "95")) # Qualité JPEG/PNG
DEFAULT_OUTPUT_FORMAT: str = os.getenv("DEFAULT_OUTPUT_FORMAT", "jpg")
# Configuration du traitement d'image
DEFAULT_OCR_LANGUAGE: str = os.getenv("DEFAULT_OCR_LANGUAGE", "fra")
ALTERNATIVE_OCR_LANGUAGE: str = os.getenv("ALTERNATIVE_OCR_LANGUAGE", "eng")
TESSERACT_DATA_PATH: str = os.getenv("TESSERACT_DATA_PATH", "/usr/share/tesseract-ocr/4.00/tessdata")
# Délais et timeouts
JOB_TIMEOUT: int = int(os.getenv("JOB_TIMEOUT", "300")) # 5 minutes
RESULT_TTL: int = int(os.getenv("RESULT_TTL", "86400")) # 24 heures
# Limites
MAX_WORKERS: int = int(os.getenv("MAX_WORKERS", "3"))
RATE_LIMIT: int = int(os.getenv("RATE_LIMIT", "100")) # requêtes par heure
class Config:
env_file = ".env"
case_sensitive = True
# Instance de configuration globale
settings = Settings()
# Créer les dossiers nécessaires s'ils n'existent pas
os.makedirs(settings.UPLOAD_FOLDER, exist_ok=True)
os.makedirs(settings.RESULT_FOLDER, exist_ok=True)
os.makedirs(settings.TEMP_FOLDER, exist_ok=True)
os.makedirs(settings.CONVERTED_FOLDER, exist_ok=True)