base.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import os
  2. from pathlib import Path
  3. from dotenv import load_dotenv
  4. from core.utils.path_utils import project_root,log_dir
  5. from pydantic import BaseSettings, Field, AnyUrl
  6. # 在 Settings 类之前加载 .env 文件
  7. load_dotenv(os.path.join(project_root,".env"))
  8. class Settings(BaseSettings):
  9. # 环境标识
  10. ENV: str = "prod" # prod/dev
  11. ENABLE_ALIYUN_LOG: bool = True
  12. # 日志配置
  13. LOG_DIR: str = log_dir
  14. LOG_LEVEL: str = "INFO"
  15. # 阿里云数据库配置 (RDS)
  16. DB_HOST: str = Field(..., env="DB_HOST")
  17. DB_PORT: int = Field(3306, env="DB_PORT")
  18. DB_USER: str = Field(..., env="DB_USER")
  19. DB_PASSWORD: str = Field(..., env="DB_PASSWORD")
  20. DB_NAME: str = Field(..., env="DB_NAME")
  21. DB_CHARSET: str = Field(..., env="DB_CHARSET")
  22. DB_POOL_SIZE: int = 20
  23. DB_POOL_RECYCLE: int = 3600
  24. # 阿里云RocketMQ配置
  25. ROCKETMQ_ENDPOINT: AnyUrl = Field(..., env="ROCKETMQ_ENDPOINT")
  26. ROCKETMQ_ACCESS_KEY_ID: str = Field(..., env="ROCKETMQ_ACCESS_KEY_ID")
  27. ROCKETMQ_ACCESS_KEY_SECRET: str = Field(..., env="ROCKETMQ_ACCESS_KEY_SECRET")
  28. ROCKETMQ_INSTANCE_ID: str = Field(..., env="ROCKETMQ_INSTANCE_ID")
  29. ROCKETMQ_WAIT_SECONDS: int = 10
  30. ROCKETMQ_BATCH: int = 1
  31. # 连接池配置
  32. CONNECTION_TIMEOUT: int = 10
  33. REQUEST_TIMEOUT: int = 30
  34. # 阿里云日志
  35. ALIYUN_ACCESS_KEY_ID: str = Field(..., env="ALIYUN_ACCESS_KEY_ID")
  36. ALIYUN_ACCESS_KEY_SECRET: str = Field(..., env="ALIYUN_ACCESS_KEY_SECRET")
  37. class Config:
  38. env_file = ".env"
  39. env_file_encoding = 'utf-8'
  40. case_sensitive = False
  41. # @property
  42. # def database_url(self) -> str:
  43. # """生成安全的数据库连接字符串"""
  44. # return f"mysql+asyncmy://{self.DB_USER}:{self.DB_PASSWORD}@{self.DB_HOST}:{self.DB_PORT}/{self.DB_NAME}?charset={self.DB_CHARSET}"
  45. settings = Settings()