"""读取/写入键值设置。""" from __future__ import annotations import json from typing import Any, Optional from sqlalchemy.orm import Session from app.models.setting import Setting def get_setting(session: Session, key: str, default: Any = None) -> Any: """读取并 JSON 解析。""" row = session.get(Setting, key) if row is None: return default try: return json.loads(row.value_json) except json.JSONDecodeError: return default def set_setting(session: Session, key: str, value: Any) -> None: """JSON 序列化后落库(upsert)。""" row = session.get(Setting, key) payload = json.dumps(value, ensure_ascii=False) if row is None: session.add(Setting(key=key, value_json=payload)) else: row.value_json = payload session.flush() def all_settings(session: Session) -> dict[str, Any]: """返回所有设置,给前端调试 / 导出。""" items: dict[str, Any] = {} for row in session.query(Setting).all(): try: items[row.key] = json.loads(row.value_json) except json.JSONDecodeError: items[row.key] = row.value_json return items def get_provider_config(session: Session, key: str) -> Optional[dict[str, Any]]: """便捷读取 OCR/VLM provider 配置 dict。""" value = get_setting(session, key, None) if isinstance(value, dict): return value return None