From 554023c469882ea997ed2217da80caf2aec0ec80 Mon Sep 17 00:00:00 2001 From: SengokuCola <1026294844@qq.com> Date: Sat, 9 May 2026 17:35:22 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20database=5Fservice.=5Fto=5Fdict=20?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=20model=5Fdump()=20=E5=AF=BC=E8=87=B4=20msgp?= =?UTF-8?q?ack=20=E5=BA=8F=E5=88=97=E5=8C=96=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/config/config.py | 2 +- src/services/database_service.py | 23 +++++++++++++++++++---- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/config/config.py b/src/config/config.py index 38ea4c6f..b824aa28 100644 --- a/src/config/config.py +++ b/src/config/config.py @@ -56,7 +56,7 @@ BOT_CONFIG_PATH: Path = (CONFIG_DIR / "bot_config.toml").resolve().absolute() MODEL_CONFIG_PATH: Path = (CONFIG_DIR / "model_config.toml").resolve().absolute() LEGACY_ENV_PATH: Path = (PROJECT_ROOT / ".env").resolve().absolute() A_MEMORIX_LEGACY_CONFIG_PATH: Path = (CONFIG_DIR / "a_memorix.toml").resolve().absolute() -MMC_VERSION: str = "1.0.0-pre.16" +MMC_VERSION: str = "1.0.0-pre.17" CONFIG_VERSION: str = "8.10.15" MODEL_CONFIG_VERSION: str = "1.16.1" diff --git a/src/services/database_service.py b/src/services/database_service.py index 57215878..2d569f93 100644 --- a/src/services/database_service.py +++ b/src/services/database_service.py @@ -3,7 +3,8 @@ import json import time import traceback -from datetime import datetime +from datetime import date, datetime +from enum import Enum from typing import TYPE_CHECKING, Any, Optional, cast from sqlalchemy import delete, func @@ -19,14 +20,28 @@ if TYPE_CHECKING: logger = get_logger("database_service") +def _to_msgpack_value(value: Any) -> Any: + if isinstance(value, datetime): + return value.isoformat() + if isinstance(value, date): + return value.isoformat() + if isinstance(value, Enum): + return value.value + if isinstance(value, dict): + return {_to_msgpack_value(key): _to_msgpack_value(item) for key, item in value.items()} + if isinstance(value, (list, tuple, set)): + return [_to_msgpack_value(item) for item in value] + return value + + def _to_dict(record: Any) -> dict[str, Any]: if record is None: return {} if isinstance(record, dict): - return record + return _to_msgpack_value(record) if hasattr(record, "model_dump"): - return record.model_dump() - return dict(record.__dict__) if hasattr(record, "__dict__") else {} + return _to_msgpack_value(record.model_dump()) + return _to_msgpack_value(dict(record.__dict__)) if hasattr(record, "__dict__") else {} def _get_model_field(model_class: type[SQLModel], field_name: str) -> Any: