config.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import os
  2. from pathlib import Path
  3. import yaml
  4. from dotenv import load_dotenv
  5. PROJECT_ROOT = Path(__file__).resolve().parent.parent
  6. # 加载 .env 文件
  7. load_dotenv(PROJECT_ROOT / ".env")
  8. def _get_env(key: str, default=None):
  9. return os.environ.get(key, default)
  10. def _load_yaml(filename: str) -> dict:
  11. filepath = PROJECT_ROOT / "config" / filename
  12. with open(filepath, encoding="utf-8") as f:
  13. return yaml.safe_load(f) or {}
  14. class _Settings:
  15. def __init__(self):
  16. self._db_cfg = _load_yaml("database_config.yaml")
  17. self._model_cfg = _load_yaml("model_config.yaml")
  18. self._service_cfg = _load_yaml("service_config.yaml")
  19. @property
  20. def mysql_host(self) -> str:
  21. return _get_env("MYSQL_HOST", self._db_cfg.get("mysql", {}).get("host", "localhost"))
  22. @property
  23. def mysql_port(self) -> int:
  24. return int(_get_env("MYSQL_PORT", self._db_cfg.get("mysql", {}).get("port", 3306)))
  25. @property
  26. def mysql_user(self) -> str:
  27. return _get_env("MYSQL_USER", self._db_cfg.get("mysql", {}).get("user", "root"))
  28. @property
  29. def mysql_password(self) -> str:
  30. return _get_env("MYSQL_PASSWORD", self._db_cfg.get("mysql", {}).get("passwd", ""))
  31. @property
  32. def mysql_db(self) -> str:
  33. return _get_env("MYSQL_DB", self._db_cfg.get("mysql", {}).get("db", ""))
  34. @property
  35. def redis_host(self) -> str:
  36. return _get_env("REDIS_HOST", self._db_cfg.get("redis", {}).get("host", "localhost"))
  37. @property
  38. def redis_port(self) -> int:
  39. return int(_get_env("REDIS_PORT", self._db_cfg.get("redis", {}).get("port", 6379)))
  40. @property
  41. def redis_password(self) -> str:
  42. return _get_env("REDIS_PASSWORD", self._db_cfg.get("redis", {}).get("passwd", ""))
  43. @property
  44. def redis_db(self) -> int:
  45. return int(_get_env("REDIS_DB", self._db_cfg.get("redis", {}).get("db", 0)))
  46. @property
  47. def log_level(self) -> str:
  48. return _get_env("LOG_LEVEL", "INFO").upper()
  49. @property
  50. def file_upload_url(self) -> str:
  51. return _get_env("FILE_UPLOAD_URL", self._service_cfg.get("aliyun", {}).get("upload_url", ""))
  52. @property
  53. def file_download_url(self) -> str:
  54. return _get_env("FILE_DOWNLOAD_URL", self._service_cfg.get("aliyun", {}).get("download_url", ""))
  55. @property
  56. def file_service_cookie(self) -> str:
  57. return _get_env("FILE_SERVICE_COOKIE", self._service_cfg.get("aliyun", {}).get("cookie", ""))
  58. @property
  59. def model_config(self) -> dict:
  60. return self._model_cfg
  61. settings = _Settings()