aidress/app/utils/config.py
2025-03-21 21:53:22 +08:00

91 lines
2.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import os
import logging
from functools import lru_cache
from typing import Optional
from pydantic import BaseModel
from dotenv import load_dotenv, find_dotenv
# 配置日志
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger("config")
# 尝试加载环境变量
logger.info("开始加载环境变量...")
load_dotenv()
class Settings(BaseModel):
"""应用程序配置类"""
# DashScope配置
dashscope_api_key: str = os.getenv("DASHSCOPE_API_KEY", "")
# 服务器配置
host: str = os.getenv("HOST", "0.0.0.0")
port: int = int(os.getenv("PORT", "9001"))
debug: bool = os.getenv("DEBUG", "False").lower() in ["true", "1", "t", "yes"]
# 腾讯云配置
qcloud_secret_id: str = os.getenv("QCLOUD_SECRET_ID", "")
qcloud_secret_key: str = os.getenv("QCLOUD_SECRET_KEY", "")
qcloud_cos_region: str = os.getenv("QCLOUD_COS_REGION", "ap-chengdu")
qcloud_cos_bucket: str = os.getenv("QCLOUD_COS_BUCKET", "")
qcloud_cos_domain: str = os.getenv("QCLOUD_COS_DOMAIN", "")
# 数据库配置
db_host: str = os.getenv("DB_HOST", "localhost")
db_port: int = int(os.getenv("DB_PORT", "3306"))
db_user: str = os.getenv("DB_USER", "root")
db_password: str = os.getenv("DB_PASSWORD", "")
db_name: str = os.getenv("DB_NAME", "aidress")
# 数据库URL
@property
def database_url(self) -> str:
"""
构建SQLAlchemy数据库连接URL
Returns:
str: 数据库连接URL
"""
return f"mysql+pymysql://{self.db_user}:{self.db_password}@{self.db_host}:{self.db_port}/{self.db_name}"
# 其他配置可以根据需要添加
log_level: str = os.getenv("LOG_LEVEL", "INFO")
@lru_cache()
def get_settings() -> Settings:
"""
获取应用程序配置
使用lru_cache装饰器避免重复读取环境变量提高性能
Returns:
Settings: 配置对象
"""
settings = Settings()
logger.info(f"配置已加载DB_HOST={settings.db_host}, DB_NAME={settings.db_name}")
return settings
def validate_api_key():
"""
验证API密钥是否已配置
Raises:
ValueError: 如果API密钥未配置
"""
settings = get_settings()
if not settings.dashscope_api_key:
raise ValueError("DASHSCOPE_API_KEY未设置请在.env文件中配置")
return True
def validate_qcloud_config():
"""
验证腾讯云配置是否已设置
Raises:
ValueError: 如果腾讯云配置未正确设置
"""
settings = get_settings()
if not settings.qcloud_secret_id or not settings.qcloud_secret_key:
raise ValueError("腾讯云SecretId和SecretKey未设置请在.env文件中配置")
if not settings.qcloud_cos_bucket:
raise ValueError("腾讯云COS存储桶名称未设置请在.env文件中配置")
return True