message_builder重构完成
This commit is contained in:
@@ -1,26 +1,27 @@
|
||||
import copy
|
||||
from typing import Dict, Any
|
||||
|
||||
|
||||
class AbstractClassFlag:
|
||||
pass
|
||||
|
||||
class BaseDataModel:
|
||||
def deepcopy(self):
|
||||
return copy.deepcopy(self)
|
||||
|
||||
def temporarily_transform_class_to_dict(obj: Any) -> Any:
|
||||
"""
|
||||
将对象或容器中的 AbstractClassFlag 子类(类对象)或 AbstractClassFlag 实例
|
||||
将对象或容器中的 BaseDataModel 子类(类对象)或 BaseDataModel 实例
|
||||
递归转换为普通 dict,不修改原对象。
|
||||
- 对于类对象(isinstance(value, type) 且 issubclass(..., AbstractClassFlag)),
|
||||
- 对于类对象(isinstance(value, type) 且 issubclass(..., BaseDataModel)),
|
||||
读取类的 __dict__ 中非 dunder 项并递归转换。
|
||||
- 对于实例(isinstance(value, AbstractClassFlag)),读取 vars(instance) 并递归转换。
|
||||
- 对于实例(isinstance(value, BaseDataModel)),读取 vars(instance) 并递归转换。
|
||||
"""
|
||||
|
||||
def _transform(value: Any) -> Any:
|
||||
# 值是类对象且为 AbstractClassFlag 的子类
|
||||
if isinstance(value, type) and issubclass(value, AbstractClassFlag):
|
||||
# 值是类对象且为 BaseDataModel 的子类
|
||||
if isinstance(value, type) and issubclass(value, BaseDataModel):
|
||||
return {k: _transform(v) for k, v in value.__dict__.items() if not k.startswith("__") and not callable(v)}
|
||||
|
||||
# 值是 AbstractClassFlag 的实例
|
||||
if isinstance(value, AbstractClassFlag):
|
||||
# 值是 BaseDataModel 的实例
|
||||
if isinstance(value, BaseDataModel):
|
||||
return {k: _transform(v) for k, v in vars(value).items()}
|
||||
|
||||
# 常见容器类型,递归处理
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
from typing import Optional, Dict, Any
|
||||
from dataclasses import dataclass, field, fields, MISSING
|
||||
from typing import Optional, Any
|
||||
from dataclasses import dataclass, field
|
||||
|
||||
from . import AbstractClassFlag
|
||||
from . import BaseDataModel
|
||||
|
||||
|
||||
@dataclass
|
||||
class DatabaseUserInfo(AbstractClassFlag):
|
||||
class DatabaseUserInfo(BaseDataModel):
|
||||
platform: str = field(default_factory=str)
|
||||
user_id: str = field(default_factory=str)
|
||||
user_nickname: str = field(default_factory=str)
|
||||
@@ -21,7 +21,7 @@ class DatabaseUserInfo(AbstractClassFlag):
|
||||
|
||||
|
||||
@dataclass
|
||||
class DatabaseGroupInfo(AbstractClassFlag):
|
||||
class DatabaseGroupInfo(BaseDataModel):
|
||||
group_id: str = field(default_factory=str)
|
||||
group_name: str = field(default_factory=str)
|
||||
group_platform: Optional[str] = None
|
||||
@@ -35,7 +35,7 @@ class DatabaseGroupInfo(AbstractClassFlag):
|
||||
|
||||
|
||||
@dataclass
|
||||
class DatabaseChatInfo(AbstractClassFlag):
|
||||
class DatabaseChatInfo(BaseDataModel):
|
||||
stream_id: str = field(default_factory=str)
|
||||
platform: str = field(default_factory=str)
|
||||
create_time: float = field(default_factory=float)
|
||||
@@ -55,7 +55,7 @@ class DatabaseChatInfo(AbstractClassFlag):
|
||||
|
||||
|
||||
@dataclass(init=False)
|
||||
class DatabaseMessages(AbstractClassFlag):
|
||||
class DatabaseMessages(BaseDataModel):
|
||||
def __init__(
|
||||
self,
|
||||
message_id: str = "",
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
from dataclasses import dataclass, field
|
||||
from typing import Optional
|
||||
|
||||
from . import BaseDataModel
|
||||
|
||||
@dataclass
|
||||
class TargetPersonInfo:
|
||||
class TargetPersonInfo(BaseDataModel):
|
||||
platform: str = field(default_factory=str)
|
||||
user_id: str = field(default_factory=str)
|
||||
user_nickname: str = field(default_factory=str)
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
from typing import Optional
|
||||
from dataclasses import dataclass, field
|
||||
|
||||
from . import BaseDataModel
|
||||
|
||||
@dataclass
|
||||
class MessageAndActionModel:
|
||||
class MessageAndActionModel(BaseDataModel):
|
||||
time: float = field(default_factory=float)
|
||||
user_id: str = field(default_factory=str)
|
||||
user_platform: str = field(default_factory=str)
|
||||
|
||||
Reference in New Issue
Block a user