Files
DP/Server/app/core/config.py

91 lines
3.0 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.
from pathlib import Path
from pydantic_settings import BaseSettings, SettingsConfigDict
BASE_DIR = Path(__file__).resolve().parents[2]
ENV_FILE = BASE_DIR / ".env"
PLACEHOLDER_SECRET_VALUES = {
"",
"your-super-secret-key-change-this",
"admin-secret-token-change-this",
}
def resolve_database_url(raw_url: str) -> str:
"""Resolve relative SQLite paths against the Server directory."""
if not raw_url.startswith("sqlite:///"):
return raw_url
sqlite_path = raw_url.removeprefix("sqlite:///")
if not sqlite_path or sqlite_path == ":memory:":
return raw_url
path_obj = Path(sqlite_path)
if path_obj.is_absolute():
return raw_url
return f"sqlite:///{(BASE_DIR / path_obj).resolve().as_posix()}"
class Settings(BaseSettings):
ENV: str = "development"
PROJECT_NAME: str = "DesignerCEP Backend"
API_V1_STR: str = "/api/v1"
DATABASE_URL: str = "sqlite:///./designercep.db"
SECRET_KEY: str = "" # 必须从 .env 读取
ACCESS_TOKEN_EXPIRE_MINUTES: int = 10080
ALLOWED_ORIGINS: str = "*"
ADMIN_TOKEN: str = "" # 必须从 .env 读取
# Email Configuration
SMTP_HOST: str = "smtp.gmail.com"
SMTP_PORT: int = 587
SMTP_USER: str = ""
SMTP_PASSWORD: str = "" # 必须从 .env 读取
EMAILS_FROM_EMAIL: str = ""
EMAILS_FROM_NAME: str = "Designer"
# 七牛云对象存储
QINIU_ACCESS_KEY: str = ""
QINIU_SECRET_KEY: str = ""
QINIU_BUCKET: str = ""
QINIU_DOMAIN: str = ""
# AI 配置
AI_PROVIDER: str = "ark"
AI_API_KEY: str = ""
AI_BASE_URL: str = "https://ark.cn-beijing.volces.com/api/v3"
AI_CHAT_BASE_URL: str = ""
AI_VISION_BASE_URL: str = ""
AI_IMAGE_BASE_URL: str = ""
AI_MODEL: str = "doubao-seed-2-0-mini-260215"
AI_VISION_MODEL: str = "doubao-seed-2-0-mini-260215"
AI_IMAGE_EDIT_MODEL: str = "doubao-seedream-5-0-260128"
AI_CHAT_MODELS: str = ""
AI_VISION_MODELS: str = ""
AI_IMAGE_EDIT_MODELS: str = ""
# 兼容旧字段
ARK_API_KEY: str = ""
ARK_BASE_URL: str = "https://ark.cn-beijing.volces.com/api/v3"
model_config = SettingsConfigDict(
env_file=ENV_FILE,
env_file_encoding="utf-8",
extra="ignore"
)
def runtime_warnings(self) -> list[str]:
warnings: list[str] = []
if not ENV_FILE.exists():
warnings.append("未找到 Server/.env当前使用的是代码默认配置。")
if self.SECRET_KEY in PLACEHOLDER_SECRET_VALUES:
warnings.append("SECRET_KEY 仍是默认值,请在部署前替换。")
if self.ADMIN_TOKEN in PLACEHOLDER_SECRET_VALUES:
warnings.append("ADMIN_TOKEN 仍是默认值,请在部署前替换。")
if not self.AI_API_KEY and not self.ARK_API_KEY:
warnings.append("AI_API_KEY / ARK_API_KEY 未配置;如果走用户自带 Key 模式可忽略此项。")
return warnings
settings = Settings()
settings.DATABASE_URL = resolve_database_url(settings.DATABASE_URL)