From c0fa92df30fdcc05b246636a0f2267a4fcde188b Mon Sep 17 00:00:00 2001 From: scdhh Date: Wed, 22 Nov 2023 15:57:04 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=A8=20fix=20Incompatible=20overrides?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nonebot_plugin_tetris_stats/db/models.py | 13 +++++++++---- .../game_data_processor/schemas.py | 7 ++++--- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/nonebot_plugin_tetris_stats/db/models.py b/nonebot_plugin_tetris_stats/db/models.py index 37fdfce..b13eb2b 100644 --- a/nonebot_plugin_tetris_stats/db/models.py +++ b/nonebot_plugin_tetris_stats/db/models.py @@ -1,4 +1,5 @@ from datetime import datetime +from typing import Any from nonebot.adapters import Message from nonebot_plugin_orm import Model @@ -13,13 +14,17 @@ from ..utils.typing import CommandType, GameType class PydanticType(TypeDecorator): impl = JSON - def process_bind_param(self, value: BaseModel, dialect: Dialect) -> str: + def process_bind_param(self, value: Any | None, dialect: Dialect) -> str: # noqa: ANN401 # 将 Pydantic 模型实例转换为 JSON - return value.json() + if isinstance(value, BaseModel): + return value.json() + raise TypeError - def process_result_value(self, value: str, dialect: Dialect) -> BaseModel: + def process_result_value(self, value: Any | None, dialect: Dialect) -> BaseModel: # noqa: ANN401 # 将 JSON 转换回 Pydantic 模型实例 - return BaseModel.parse_raw(value) + if isinstance(value, str | bytes): + return BaseModel.parse_raw(value) + raise TypeError class Bind(MappedAsDataclass, Model): diff --git a/nonebot_plugin_tetris_stats/game_data_processor/schemas.py b/nonebot_plugin_tetris_stats/game_data_processor/schemas.py index 4327a79..752c06e 100644 --- a/nonebot_plugin_tetris_stats/game_data_processor/schemas.py +++ b/nonebot_plugin_tetris_stats/game_data_processor/schemas.py @@ -1,5 +1,4 @@ from abc import ABC, abstractmethod -from typing import Self from pydantic import BaseModel @@ -7,8 +6,10 @@ from pydantic import BaseModel class BaseUser(ABC, BaseModel): """游戏用户""" - def __eq__(self, __value: Self) -> bool: - return self.unique_identifier == __value.unique_identifier + def __eq__(self, __value: object) -> bool: + if isinstance(__value, BaseUser): + return self.unique_identifier == __value.unique_identifier + return False @property @abstractmethod