83 lines
2.9 KiB
Python
83 lines
2.9 KiB
Python
import os
|
||
from functools import lru_cache
|
||
from typing import Optional
|
||
from pydantic import BaseModel
|
||
from dotenv import load_dotenv
|
||
|
||
# 加载环境变量(如果直接从main导入,这里可能是冗余的,但为了安全起见)
|
||
load_dotenv()
|
||
|
||
class Settings(BaseModel):
|
||
"""应用程序配置类"""
|
||
# DashScope配置
|
||
dashscope_api_key: str = os.getenv("DASHSCOPE_API_KEY", "sk-caa199589f1c451aaac471fad2986e28")
|
||
|
||
# 服务器配置
|
||
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", "AKIDxnbGj281iHtKallqqzvlV5YxBCrPltnS")
|
||
qcloud_secret_key: str = os.getenv("QCLOUD_SECRET_KEY", "ta6PXTMBsX7dzA7IN6uYUFn8F9uTovoU")
|
||
qcloud_cos_region: str = os.getenv("QCLOUD_COS_REGION", "ap-chengdu")
|
||
qcloud_cos_bucket: str = os.getenv("QCLOUD_COS_BUCKET", "aidress-1311994147")
|
||
qcloud_cos_domain: str = os.getenv("QCLOUD_COS_DOMAIN", "https://aidress-1311994147.cos.ap-chengdu.myqcloud.com")
|
||
|
||
# 数据库配置
|
||
db_host: str = os.getenv("DB_HOST", "gz-cynosdbmysql-grp-2j1cnopr.sql.tencentcdb.com")
|
||
db_port: int = int(os.getenv("DB_PORT", "27469"))
|
||
db_user: str = os.getenv("DB_USER", "root")
|
||
db_password: str = os.getenv("DB_PASSWORD", "Aa#223388")
|
||
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: 配置对象
|
||
"""
|
||
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 |