| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- """DMS环境配置。"""
- from __future__ import annotations
- import os
- from pathlib import Path
- from typing import Any
- BACKEND_ROOT = Path(__file__).resolve().parents[1]
- DEFAULT_STORAGE_ROOT = BACKEND_ROOT / "dms-storage"
- DEFAULT_UI_DICTIONARY_CONFIG_PATH = (
- BACKEND_ROOT / "dms" / "resources" / "ui-dictionaries.zh-CN.json"
- )
- DEFAULT_DATABASE_URL = (
- "mysql+pymysql://dms_app:change-me@127.0.0.1:3306/dms?charset=utf8mb4"
- )
- def _positive_int(name: str, default: int) -> int:
- raw_value = os.environ.get(name)
- if raw_value is None or not raw_value.strip():
- return default
- try:
- value = int(raw_value)
- except ValueError as exc:
- raise ValueError(f"{name}必须是正整数") from exc
- if value <= 0:
- raise ValueError(f"{name}必须是正整数")
- return value
- def load_dms_config() -> dict[str, Any]:
- """从环境变量加载DMS配置,不读取或覆盖现有AI配置。"""
- storage_value = os.environ.get("DMS_STORAGE_ROOT", "").strip()
- storage_root = Path(storage_value or DEFAULT_STORAGE_ROOT).expanduser()
- max_upload_size = _positive_int(
- "DMS_MAX_UPLOAD_SIZE", 100 * 1024 * 1024
- )
- max_file_size = _positive_int(
- "DMS_MAX_FILE_SIZE", min(50 * 1024 * 1024, max_upload_size)
- )
- if max_file_size > max_upload_size:
- raise ValueError("DMS_MAX_FILE_SIZE不得超过DMS_MAX_UPLOAD_SIZE")
- database_url = os.environ.get("DMS_DATABASE_URL", "").strip()
- ui_dictionary_config_value = os.environ.get(
- "DMS_UI_DICTIONARY_CONFIG_PATH", ""
- ).strip()
- ui_dictionary_config_path = Path(
- ui_dictionary_config_value or DEFAULT_UI_DICTIONARY_CONFIG_PATH
- ).expanduser()
- return {
- "SQLALCHEMY_DATABASE_URI": database_url or DEFAULT_DATABASE_URL,
- "SQLALCHEMY_TRACK_MODIFICATIONS": False,
- "SQLALCHEMY_ENGINE_OPTIONS": {
- "isolation_level": "READ COMMITTED",
- "pool_pre_ping": True,
- "pool_recycle": 1800,
- "connect_args": {
- "init_command": "SET time_zone = '+00:00'",
- },
- },
- "DMS_STORAGE_ROOT": str(storage_root.resolve()),
- "DMS_MAX_UPLOAD_SIZE": max_upload_size,
- "DMS_MAX_FILE_SIZE": max_file_size,
- "MAX_CONTENT_LENGTH": max_upload_size,
- "DMS_BATCH_MAX_FILES": _positive_int("DMS_BATCH_MAX_FILES", 50),
- "DMS_BUSINESS_TIMEZONE": (
- os.environ.get("DMS_BUSINESS_TIMEZONE", "").strip()
- or "Asia/Shanghai"
- ),
- "DMS_JWT_SECRET": os.environ.get("DMS_JWT_SECRET", ""),
- "DMS_JWT_ISSUER": "dms",
- "DMS_JWT_EXPIRES_SECONDS": 7200,
- "DMS_JWT_KEEP_SIGNED_IN_EXPIRES_SECONDS": 604800,
- "DMS_UI_DICTIONARY_CONFIG_PATH": str(
- ui_dictionary_config_path.resolve()
- ),
- }
|