"""应用配置""" from typing import Optional from pydantic_settings import BaseSettings, SettingsConfigDict class Settings(BaseSettings): """应用配置""" model_config = SettingsConfigDict( env_file=".env", env_file_encoding="utf-8", case_sensitive=False, ) # ============== 应用基础配置 ============== APP_NAME: str = "BtToxin Pipeline" APP_VERSION: str = "1.0.0" DEBUG: bool = False # API 配置 API_V1_PREFIX: str = "/api/v1" # ============== 数据库配置 ============== POSTGRES_HOST: str = "localhost" POSTGRES_PORT: int = 5432 POSTGRES_USER: str = "bttoxin" POSTGRES_PASSWORD: str = "bttoxin_password" POSTGRES_DB: str = "bttoxin_db" @property def DATABASE_URL(self) -> str: """数据库连接 URL""" return ( f"postgresql://{self.POSTGRES_USER}:{self.POSTGRES_PASSWORD}" f"@{self.POSTGRES_HOST}:{self.POSTGRES_PORT}/{self.POSTGRES_DB}" ) # ============== Redis 配置 ============== REDIS_HOST: str = "localhost" REDIS_PORT: int = 6379 REDIS_DB: int = 0 REDIS_PASSWORD: Optional[str] = None @property def REDIS_URL(self) -> str: """Redis 连接 URL""" if self.REDIS_PASSWORD: return f"redis://:{self.REDIS_PASSWORD}@{self.REDIS_HOST}:{self.REDIS_PORT}/{self.REDIS_DB}" return f"redis://{self.REDIS_HOST}:{self.REDIS_PORT}/{self.REDIS_DB}" # ============== Celery 配置 ============== CELERY_BROKER_URL: Optional[str] = None CELERY_RESULT_BACKEND: Optional[str] = None def get_celery_broker_url(self) -> str: """获取 Celery Broker URL""" return self.CELERY_BROKER_URL or self.REDIS_URL def get_celery_result_backend(self) -> str: """获取 Celery Result Backend URL""" return self.CELERY_RESULT_BACKEND or self.REDIS_URL # ============== 工作空间配置 ============== WORKSPACE_BASE_PATH: str = "/data/jobs" TEMP_BASE_PATH: str = "/data/temp" MAX_UPLOAD_SIZE_MB: int = 500 # ============== Docker 配置 ============== DOCKER_IMAGE: str = "quay.io/biocontainers/bttoxin_digger:1.0.10--hdfd78af_0" DOCKER_PLATFORM: str = "linux/amd64" # ============== S3 配置 ============== S3_ENDPOINT: Optional[str] = None S3_ACCESS_KEY: Optional[str] = None S3_SECRET_KEY: Optional[str] = None S3_BUCKET: str = "bttoxin-results" S3_REGION: str = "us-east-1" # ============== 任务配置 ============== DEFAULT_THREADS: int = 4 MAX_THREADS: int = 16 TASK_TIMEOUT_SECONDS: int = 7200 # 2小时 JOB_RETENTION_DAYS: int = 30 # ============== CORS 配置 ============== CORS_ORIGINS: list = ["http://localhost:3000", "http://localhost:5173"] # ============== 日志配置 ============== LOG_LEVEL: str = "INFO" LOG_FORMAT: str = "%(asctime)s - %(name)s - %(levelname)s - %(message)s" # 创建全局配置实例 settings = Settings()