from pydantic_settings import BaseSettings from typing import Optional import os from pathlib import Path class Settings(BaseSettings): # API Settings API_V1_STR: str = "/api/v1" PROJECT_NAME: str = "Legal Document Masker API" # Security SECRET_KEY: str = "your-secret-key-here" # Change in production ACCESS_TOKEN_EXPIRE_MINUTES: int = 60 * 24 * 8 # 8 days # Database BASE_DIR: Path = Path(__file__).parent.parent.parent DATABASE_URL: str = f"sqlite:///{BASE_DIR}/storage/legal_doc_masker.db" # File Storage UPLOAD_FOLDER: Path = BASE_DIR / "storage" / "uploads" PROCESSED_FOLDER: Path = BASE_DIR / "storage" / "processed" MAX_FILE_SIZE: int = 50 * 1024 * 1024 # 50MB ALLOWED_EXTENSIONS: set = {"pdf", "docx", "doc"} # Celery CELERY_BROKER_URL: str = "redis://redis:6379/0" CELERY_RESULT_BACKEND: str = "redis://redis:6379/0" # Ollama API settings OLLAMA_API_URL: str = "https://api.ollama.com" OLLAMA_API_KEY: str = "" OLLAMA_MODEL: str = "llama2" # Logging settings LOG_LEVEL: str = "INFO" LOG_FORMAT: str = "%(asctime)s - %(name)s - %(levelname)s - %(message)s" LOG_DATE_FORMAT: str = "%Y-%m-%d %H:%M:%S" LOG_FILE: str = "app.log" class Config: case_sensitive = True env_file = ".env" env_file_encoding = "utf-8" extra = "allow" def __init__(self, **kwargs): super().__init__(**kwargs) # Create storage directories if they don't exist self.UPLOAD_FOLDER.mkdir(parents=True, exist_ok=True) self.PROCESSED_FOLDER.mkdir(parents=True, exist_ok=True) # Create storage directory for database (self.BASE_DIR / "storage").mkdir(parents=True, exist_ok=True) settings = Settings()