import os from pathlib import Path import yaml from dotenv import load_dotenv PROJECT_ROOT = Path(__file__).resolve().parent.parent # 加载 .env 文件 load_dotenv(PROJECT_ROOT / ".env") def _get_env(key: str, default=None): return os.environ.get(key, default) def _load_yaml(filename: str) -> dict: filepath = PROJECT_ROOT / "config" / filename with open(filepath, encoding="utf-8") as f: return yaml.safe_load(f) or {} class _Settings: def __init__(self): self._db_cfg = _load_yaml("database_config.yaml") self._model_cfg = _load_yaml("model_config.yaml") self._service_cfg = _load_yaml("service_config.yaml") @property def mysql_host(self) -> str: return _get_env("MYSQL_HOST", self._db_cfg.get("mysql", {}).get("host", "localhost")) @property def mysql_port(self) -> int: return int(_get_env("MYSQL_PORT", self._db_cfg.get("mysql", {}).get("port", 3306))) @property def mysql_user(self) -> str: return _get_env("MYSQL_USER", self._db_cfg.get("mysql", {}).get("user", "root")) @property def mysql_password(self) -> str: return _get_env("MYSQL_PASSWORD", self._db_cfg.get("mysql", {}).get("passwd", "")) @property def mysql_db(self) -> str: return _get_env("MYSQL_DB", self._db_cfg.get("mysql", {}).get("db", "")) @property def redis_host(self) -> str: return _get_env("REDIS_HOST", self._db_cfg.get("redis", {}).get("host", "localhost")) @property def redis_port(self) -> int: return int(_get_env("REDIS_PORT", self._db_cfg.get("redis", {}).get("port", 6379))) @property def redis_password(self) -> str: return _get_env("REDIS_PASSWORD", self._db_cfg.get("redis", {}).get("passwd", "")) @property def redis_db(self) -> int: return int(_get_env("REDIS_DB", self._db_cfg.get("redis", {}).get("db", 0))) @property def log_level(self) -> str: return _get_env("LOG_LEVEL", "INFO").upper() @property def file_upload_url(self) -> str: return _get_env("FILE_UPLOAD_URL", self._service_cfg.get("aliyun", {}).get("upload_url", "")) @property def file_download_url(self) -> str: return _get_env("FILE_DOWNLOAD_URL", self._service_cfg.get("aliyun", {}).get("download_url", "")) @property def model_config(self) -> dict: return self._model_cfg settings = _Settings()