94 lines
3.5 KiB
Python
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()
|