from pydantic_settings import BaseSettings from pathlib import Path import re from typing import Literal def _load_ruoyi_mysql_defaults() -> dict: """从主项目开发配置中提取 MySQL 连接默认值。""" project_root = Path(__file__).resolve().parents[2] config_path = project_root / "ruoyi-admin" / "src" / "main" / "resources" / "application-dev.yml" if not config_path.exists(): return {} text = config_path.read_text(encoding="utf-8") match = re.search( r"master:\s*\n" r"\s*url:\s*jdbc:mysql://(?P[^:/?#]+):(?P\d+)/(?P[^?\s]+)[^\n]*\n" r"\s*username:\s*(?P[^\n]+)\n" r"\s*password:\s*(?P[^\n]+)", text, ) if not match: return {} return {key: value.strip() for key, value in match.groupdict().items()} MYSQL_DEFAULTS = _load_ruoyi_mysql_defaults() class Settings(BaseSettings): """全局配置类""" # 应用配置 APP_NAME: str = "流水分析Mock服务" APP_VERSION: str = "1.0.0" DEBUG: bool = True # 服务器配置 HOST: str = "0.0.0.0" PORT: int = 8000 # 模拟配置 PARSE_DELAY_SECONDS: int = 4 # 文件解析延迟秒数 MAX_FILE_SIZE: int = 10485760 # 10MB RULE_HIT_MODE: Literal["subset", "all"] = "subset" # 测试数据配置 INITIAL_PROJECT_ID: int = 1000 INITIAL_LOG_ID: int = 10000 # 员工库只读配置 CCDI_DB_HOST: str = MYSQL_DEFAULTS.get("host", "") CCDI_DB_PORT: int = int(MYSQL_DEFAULTS.get("port", 3306)) CCDI_DB_NAME: str = MYSQL_DEFAULTS.get("database", "") CCDI_DB_USERNAME: str = MYSQL_DEFAULTS.get("username", "") CCDI_DB_PASSWORD: str = MYSQL_DEFAULTS.get("password", "") CCDI_DB_CONNECT_TIMEOUT_SECONDS: int = 5 class Config: env_file = ".env" env_file_encoding = "utf-8" settings = Settings()