config.py 2.3 KB

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