93 lines
3.8 KiB
Python
93 lines
3.8 KiB
Python
"""
|
|
Configuration module for the Document Translation API
|
|
SaaS-ready with comprehensive settings for production deployment
|
|
"""
|
|
import os
|
|
from pathlib import Path
|
|
from dotenv import load_dotenv
|
|
|
|
load_dotenv()
|
|
|
|
class Config:
|
|
# ============== Translation Service ==============
|
|
TRANSLATION_SERVICE = os.getenv("TRANSLATION_SERVICE", "google")
|
|
DEEPL_API_KEY = os.getenv("DEEPL_API_KEY", "")
|
|
|
|
# Ollama Configuration
|
|
OLLAMA_BASE_URL = os.getenv("OLLAMA_BASE_URL", "http://localhost:11434")
|
|
OLLAMA_MODEL = os.getenv("OLLAMA_MODEL", "llama3")
|
|
OLLAMA_VISION_MODEL = os.getenv("OLLAMA_VISION_MODEL", "llava")
|
|
|
|
# ============== File Upload Configuration ==============
|
|
MAX_FILE_SIZE_MB = int(os.getenv("MAX_FILE_SIZE_MB", "50"))
|
|
MAX_FILE_SIZE_BYTES = MAX_FILE_SIZE_MB * 1024 * 1024
|
|
|
|
# Directories
|
|
BASE_DIR = Path(__file__).parent
|
|
UPLOAD_DIR = BASE_DIR / "uploads"
|
|
OUTPUT_DIR = BASE_DIR / "outputs"
|
|
TEMP_DIR = BASE_DIR / "temp"
|
|
LOGS_DIR = BASE_DIR / "logs"
|
|
|
|
# Supported file types
|
|
SUPPORTED_EXTENSIONS = {".xlsx", ".docx", ".pptx"}
|
|
|
|
# ============== Rate Limiting (SaaS) ==============
|
|
RATE_LIMIT_ENABLED = os.getenv("RATE_LIMIT_ENABLED", "true").lower() == "true"
|
|
RATE_LIMIT_PER_MINUTE = int(os.getenv("RATE_LIMIT_PER_MINUTE", "30"))
|
|
RATE_LIMIT_PER_HOUR = int(os.getenv("RATE_LIMIT_PER_HOUR", "200"))
|
|
TRANSLATIONS_PER_MINUTE = int(os.getenv("TRANSLATIONS_PER_MINUTE", "10"))
|
|
TRANSLATIONS_PER_HOUR = int(os.getenv("TRANSLATIONS_PER_HOUR", "50"))
|
|
MAX_CONCURRENT_TRANSLATIONS = int(os.getenv("MAX_CONCURRENT_TRANSLATIONS", "5"))
|
|
|
|
# ============== Cleanup Service ==============
|
|
CLEANUP_ENABLED = os.getenv("CLEANUP_ENABLED", "true").lower() == "true"
|
|
CLEANUP_INTERVAL_MINUTES = int(os.getenv("CLEANUP_INTERVAL_MINUTES", "15"))
|
|
FILE_TTL_MINUTES = int(os.getenv("FILE_TTL_MINUTES", "60"))
|
|
INPUT_FILE_TTL_MINUTES = int(os.getenv("INPUT_FILE_TTL_MINUTES", "30"))
|
|
OUTPUT_FILE_TTL_MINUTES = int(os.getenv("OUTPUT_FILE_TTL_MINUTES", "120"))
|
|
|
|
# Disk space thresholds
|
|
DISK_WARNING_THRESHOLD_GB = float(os.getenv("DISK_WARNING_THRESHOLD_GB", "5.0"))
|
|
DISK_CRITICAL_THRESHOLD_GB = float(os.getenv("DISK_CRITICAL_THRESHOLD_GB", "1.0"))
|
|
|
|
# ============== Security ==============
|
|
ENABLE_HSTS = os.getenv("ENABLE_HSTS", "false").lower() == "true"
|
|
CORS_ORIGINS = os.getenv("CORS_ORIGINS", "*").split(",")
|
|
MAX_REQUEST_SIZE_MB = int(os.getenv("MAX_REQUEST_SIZE_MB", "100"))
|
|
REQUEST_TIMEOUT_SECONDS = int(os.getenv("REQUEST_TIMEOUT_SECONDS", "300"))
|
|
|
|
# ============== Monitoring ==============
|
|
LOG_LEVEL = os.getenv("LOG_LEVEL", "INFO")
|
|
ENABLE_REQUEST_LOGGING = os.getenv("ENABLE_REQUEST_LOGGING", "true").lower() == "true"
|
|
MAX_MEMORY_PERCENT = float(os.getenv("MAX_MEMORY_PERCENT", "80"))
|
|
|
|
# ============== API Configuration ==============
|
|
API_TITLE = "Document Translation API"
|
|
API_VERSION = "1.0.0"
|
|
API_DESCRIPTION = """
|
|
Advanced Document Translation API with strict formatting preservation.
|
|
|
|
Supports:
|
|
- Excel (.xlsx) - Preserves cell formatting, formulas, merged cells, images
|
|
- Word (.docx) - Preserves styles, tables, images, headers/footers
|
|
- PowerPoint (.pptx) - Preserves layouts, animations, embedded media
|
|
|
|
SaaS Features:
|
|
- Rate limiting per client IP
|
|
- Automatic file cleanup
|
|
- Health monitoring
|
|
- Request logging
|
|
"""
|
|
|
|
@classmethod
|
|
def ensure_directories(cls):
|
|
"""Create necessary directories if they don't exist"""
|
|
cls.UPLOAD_DIR.mkdir(exist_ok=True, parents=True)
|
|
cls.OUTPUT_DIR.mkdir(exist_ok=True, parents=True)
|
|
cls.TEMP_DIR.mkdir(exist_ok=True, parents=True)
|
|
cls.LOGS_DIR.mkdir(exist_ok=True, parents=True)
|
|
|
|
|
|
config = Config()
|