deep-risk/backend/app/config.py
2025-12-14 20:08:27 +08:00

94 lines
3.5 KiB
Python

"""
应用配置管理
使用Pydantic Settings管理环境变量和配置
"""
from typing import List, Optional
from functools import lru_cache
from pydantic import Field
from pydantic_settings import BaseSettings
class Settings(BaseSettings):
"""应用设置"""
# 应用基础配置
APP_NAME: str = "DeepRisk Backend"
APP_VERSION: str = "0.1.0"
DEBUG: bool = Field(default=False, env="DEBUG")
ENVIRONMENT: str = Field(default="development", env="ENVIRONMENT")
SECRET_KEY: str = Field(..., env="SECRET_KEY")
API_V1_STR: str = Field(default="/api/v1", env="API_V1_STR")
# 数据库配置
DATABASE_URL: str = Field(..., env="DATABASE_URL")
DB_ECHO: bool = Field(default=False, env="DB_ECHO")
# Redis配置
REDIS_URL: str = Field(default="redis://localhost:6379/0", env="REDIS_URL")
REDIS_PASSWORD: Optional[str] = Field(default=None, env="REDIS_PASSWORD")
REDIS_DB: int = Field(default=0, env="REDIS_DB")
# JWT配置
JWT_SECRET_KEY: str = Field(..., env="JWT_SECRET_KEY")
JWT_ALGORITHM: str = Field(default="HS256", env="JWT_ALGORITHM")
JWT_EXPIRE_MINUTES: int = Field(default=30, env="JWT_EXPIRE_MINUTES")
JWT_REFRESH_EXPIRE_DAYS: int = Field(default=7, env="JWT_REFRESH_EXPIRE_DAYS")
# 文件上传配置
UPLOAD_DIR: str = Field(default="./static/uploads", env="UPLOAD_DIR")
MAX_FILE_SIZE: int = Field(default=10 * 1024 * 1024, env="MAX_FILE_SIZE") # 10MB
ALLOWED_EXTENSIONS: str = Field(
default="xlsx,xls,csv,pdf,doc,docx",
env="ALLOWED_EXTENSIONS"
)
# Celery配置
CELERY_BROKER_URL: str = Field(default="redis://localhost:6379/1", env="CELERY_BROKER_URL")
CELERY_RESULT_BACKEND: str = Field(default="redis://localhost:6379/2", env="CELERY_RESULT_BACKEND")
# 邮件配置
MAIL_USERNAME: Optional[str] = Field(default=None, env="MAIL_USERNAME")
MAIL_PASSWORD: Optional[str] = Field(default=None, env="MAIL_PASSWORD")
MAIL_FROM: Optional[str] = Field(default=None, env="MAIL_FROM")
MAIL_PORT: int = Field(default=587, env="MAIL_PORT")
MAIL_SERVER: Optional[str] = Field(default=None, env="MAIL_SERVER")
MAIL_FROM_NAME: Optional[str] = Field(default=None, env="MAIL_FROM_NAME")
# 日志配置
LOG_LEVEL: str = Field(default="INFO", env="LOG_LEVEL")
LOG_FILE: str = Field(default="./logs/deeprisk.log", env="LOG_FILE")
LOG_ROTATION: str = Field(default="100 MB", env="LOG_ROTATION")
LOG_RETENTION: str = Field(default="30 days", env="LOG_RETENTION")
# 风险检测配置
RISK_CHECK_BATCH_SIZE: int = Field(default=1000, env="RISK_CHECK_BATCH_SIZE")
RISK_DETECTION_THRESHOLD: float = Field(default=0.05, env="RISK_DETECTION_THRESHOLD")
MAX_CONCURRENT_TASKS: int = Field(default=10, env="MAX_CONCURRENT_TASKS")
# 报告生成配置
REPORT_TEMPLATE_DIR: str = Field(default="./templates", env="REPORT_TEMPLATE_DIR")
REPORT_OUTPUT_DIR: str = Field(default="./static/reports", env="REPORT_OUTPUT_DIR")
PDF_ENGINE: str = Field(default="reportlab", env="PDF_ENGINE")
@property
def allowed_extensions_list(self) -> List[str]:
"""解析ALLOWED_EXTENSIONS为列表"""
if isinstance(self.ALLOWED_EXTENSIONS, str):
return [ext.strip() for ext in self.ALLOWED_EXTENSIONS.split(",") if ext.strip()]
return self.ALLOWED_EXTENSIONS
class Config:
env_file = ".env"
case_sensitive = True
@lru_cache()
def get_settings() -> Settings:
"""获取应用设置实例(单例模式)"""
return Settings()
# 全局设置实例
settings = get_settings()