modify: massage_item 完善 content 字段 from_dict 转换操作
This commit is contained in:
@@ -17,66 +17,66 @@ class MessageItem:
|
||||
# 可选字段
|
||||
status: MessageStatus = field(
|
||||
default=MessageStatus.PENDING,
|
||||
metadata={"description": "消息状态:PENDING(待处理)、PROCESSING(处理中)、COMPLETED(已完成)、FAILED(失败)"}
|
||||
metadata={
|
||||
"description": "消息状态:PENDING(待处理)、PROCESSING(处理中)、COMPLETED(已完成)、FAILED(失败)"
|
||||
},
|
||||
)
|
||||
type: MessageType = field(
|
||||
default=MessageType.TASK,
|
||||
metadata={"description": "消息类型:TASK(任务)、NOTIFICATION(通知)、RESPONSE(响应)"}
|
||||
metadata={
|
||||
"description": "消息类型:TASK(任务)、NOTIFICATION(通知)、RESPONSE(响应)"
|
||||
},
|
||||
)
|
||||
createtime: datetime = field(
|
||||
default_factory=datetime.now, # type: ignore
|
||||
metadata={"description": "消息创建时间"}
|
||||
metadata={"description": "消息创建时间"},
|
||||
)
|
||||
updatetime: datetime = field(
|
||||
default_factory=datetime.now, # type: ignore
|
||||
metadata={"description": "消息最后更新时间"}
|
||||
metadata={"description": "消息最后更新时间"},
|
||||
)
|
||||
result: dict = field(
|
||||
default_factory=dict,
|
||||
metadata={"description": "消息处理结果,存储任务执行后的输出数据"}
|
||||
metadata={"description": "消息处理结果,存储任务执行后的输出数据"},
|
||||
)
|
||||
id: str = field(
|
||||
default_factory=lambda: str(uuid.uuid4()),
|
||||
metadata={"description": "消息唯一标识符"}
|
||||
metadata={"description": "消息唯一标识符"},
|
||||
)
|
||||
priority: MessagePriority = field(
|
||||
default=MessagePriority.NORMAL,
|
||||
metadata={"description": "消息优先级:LOW(低)、NORMAL(普通)、HIGH(高)、URGENT(紧急)"}
|
||||
metadata={
|
||||
"description": "消息优先级:LOW(低)、NORMAL(普通)、HIGH(高)、URGENT(紧急)"
|
||||
},
|
||||
)
|
||||
source: str = field(
|
||||
default="client",
|
||||
metadata={"description": "消息来源,标识发送方"}
|
||||
default="client", metadata={"description": "消息来源,标识发送方"}
|
||||
)
|
||||
destination: str = field(
|
||||
default="client",
|
||||
metadata={"description": "消息目标,标识接收方(即task函数名)"}
|
||||
default="client", metadata={"description": "消息目标,标识接收方(即task函数名)"}
|
||||
)
|
||||
retry_count: int = field(
|
||||
default=0,
|
||||
metadata={"description": "重试次数,记录消息处理失败后的重试次数"}
|
||||
default=0, metadata={"description": "重试次数,记录消息处理失败后的重试次数"}
|
||||
)
|
||||
expire_time: Optional[datetime] = field(
|
||||
default=None,
|
||||
metadata={"description": "消息过期时间,超过此时间消息将不再处理"}
|
||||
default=None, metadata={"description": "消息过期时间,超过此时间消息将不再处理"}
|
||||
)
|
||||
tags: Optional[str] = field(
|
||||
default=None,
|
||||
metadata={"description": "消息标签,用于分类和筛选"}
|
||||
default=None, metadata={"description": "消息标签,用于分类和筛选"}
|
||||
)
|
||||
metadata: dict = field(
|
||||
default_factory=dict,
|
||||
metadata={"description": "额外元数据,存储自定义的扩展信息"}
|
||||
metadata={"description": "额外元数据,存储自定义的扩展信息"},
|
||||
)
|
||||
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, data: Dict[str, Any]) -> "MessageItem":
|
||||
"""从字典创建消息对象"""
|
||||
# 处理日期时间字段
|
||||
datetime_fields = ['createtime', 'updatetime', 'expire_time']
|
||||
datetime_fields = ["createtime", "updatetime", "expire_time"]
|
||||
for field in datetime_fields:
|
||||
if field in data:
|
||||
if data[field] == 'null':
|
||||
if data[field] == "null":
|
||||
data[field] = None
|
||||
continue
|
||||
if isinstance(data[field], str):
|
||||
@@ -86,41 +86,55 @@ class MessageItem:
|
||||
elif data[field] is None:
|
||||
data[field] = None
|
||||
else:
|
||||
raise ValueError(f"请使用 'str' 或 'datetime' 类型设置 {field} 字段")
|
||||
raise ValueError(
|
||||
f"请使用 'str' 或 'datetime' 类型设置 {field} 字段"
|
||||
)
|
||||
|
||||
if 'result' in data:
|
||||
if data['result'] == 'null':
|
||||
data['result'] = {}
|
||||
elif isinstance(data['result'], str):
|
||||
data['result'] = json.loads(data['result'])
|
||||
if "content" in data:
|
||||
if data["content"] == "null":
|
||||
data["content"] = {}
|
||||
elif isinstance(data["content"], str):
|
||||
data["content"] = json.loads(data["content"])
|
||||
|
||||
if 'tags' in data:
|
||||
if data['tags'] == 'null':
|
||||
data['tags'] = None
|
||||
if "metadata" in data:
|
||||
if data["metadata"] == "null":
|
||||
data["metadata"] = {}
|
||||
elif isinstance(data["metadata"], str):
|
||||
data["metadata"] = json.loads(data["metadata"])
|
||||
|
||||
if "result" in data:
|
||||
if data["result"] == "null":
|
||||
data["result"] = {}
|
||||
elif isinstance(data["result"], str):
|
||||
data["result"] = json.loads(data["result"])
|
||||
|
||||
if "tags" in data:
|
||||
if data["tags"] == "null":
|
||||
data["tags"] = None
|
||||
|
||||
# 处理枚举字段
|
||||
if 'type' in data:
|
||||
if isinstance(data['type'], str):
|
||||
data['type'] = MessageType(data['type']) # 使用枚举名称
|
||||
elif isinstance(data['type'], MessageType):
|
||||
if "type" in data:
|
||||
if isinstance(data["type"], str):
|
||||
data["type"] = MessageType(data["type"]) # 使用枚举名称
|
||||
elif isinstance(data["type"], MessageType):
|
||||
pass # 已经是枚举类型
|
||||
else:
|
||||
raise ValueError(f"请使用 'str' 或 'MessageType' 类型设置 type 字段")
|
||||
|
||||
if 'status' in data:
|
||||
if isinstance(data['status'], str):
|
||||
data['status'] = MessageStatus(data['status']) # 使用枚举名称
|
||||
elif isinstance(data['status'], int):
|
||||
data['status'] = MessageStatus(data['status']) # 使用枚举值
|
||||
elif isinstance(data['status'], MessageStatus):
|
||||
if "status" in data:
|
||||
if isinstance(data["status"], str):
|
||||
data["status"] = MessageStatus(data["status"]) # 使用枚举名称
|
||||
elif isinstance(data["status"], int):
|
||||
data["status"] = MessageStatus(data["status"]) # 使用枚举值
|
||||
elif isinstance(data["status"], MessageStatus):
|
||||
pass # 已经是枚举类型
|
||||
else:
|
||||
raise ValueError(f"Invalid message status: {data['status']}")
|
||||
|
||||
if 'priority' in data:
|
||||
if isinstance(data['priority'], (int, str)):
|
||||
data['priority'] = MessagePriority(data['priority']) # type: ignore
|
||||
elif isinstance(data['priority'], MessagePriority):
|
||||
if "priority" in data:
|
||||
if isinstance(data["priority"], (int, str)):
|
||||
data["priority"] = MessagePriority(data["priority"]) # type: ignore
|
||||
elif isinstance(data["priority"], MessagePriority):
|
||||
pass
|
||||
else:
|
||||
raise ValueError("请使用 'int' 或 'str' 类型设置 priority 字段")
|
||||
@@ -134,42 +148,41 @@ class MessageItem:
|
||||
Dict[str, Any]: 消息数据字典
|
||||
"""
|
||||
return {
|
||||
'id': self.id,
|
||||
'type': self.type.value,
|
||||
'status': self.status.value,
|
||||
'content': self.content,
|
||||
'createtime': self.createtime.isoformat(),
|
||||
'updatetime': self.updatetime.isoformat(),
|
||||
'priority': self.priority.value,
|
||||
'source': self.source,
|
||||
'retry_count': self.retry_count,
|
||||
'expire_time': self.expire_time.isoformat() if self.expire_time else None,
|
||||
'tags': self.tags,
|
||||
'metadata': self.metadata,
|
||||
'result': self.result,
|
||||
"destination": self.destination
|
||||
"id": self.id,
|
||||
"type": self.type.value,
|
||||
"status": self.status.value,
|
||||
"content": self.content,
|
||||
"createtime": self.createtime.isoformat(),
|
||||
"updatetime": self.updatetime.isoformat(),
|
||||
"priority": self.priority.value,
|
||||
"source": self.source,
|
||||
"retry_count": self.retry_count,
|
||||
"expire_time": self.expire_time.isoformat() if self.expire_time else None,
|
||||
"tags": self.tags,
|
||||
"metadata": self.metadata,
|
||||
"result": self.result,
|
||||
"destination": self.destination,
|
||||
}
|
||||
|
||||
def to_dict_by_core(self) -> Dict[str, Any]:
|
||||
"""转换为核心库需要的字典格式"""
|
||||
return {
|
||||
'id': self.id,
|
||||
'type': self.type.value,
|
||||
'status': self.status.value,
|
||||
'content': json.dumps(self.content),
|
||||
'createtime': self.createtime.isoformat(),
|
||||
'updatetime': self.updatetime.isoformat(),
|
||||
'priority': self.priority.value,
|
||||
'source': self.source,
|
||||
'retry_count': self.retry_count,
|
||||
'expire_time': self.expire_time.isoformat() if self.expire_time else 'null',
|
||||
'tags': self.tags if self.tags else 'null',
|
||||
'metadata': json.dumps(self.metadata),
|
||||
'result': json.dumps(self.result),
|
||||
"destination": self.destination
|
||||
"id": self.id,
|
||||
"type": self.type.value,
|
||||
"status": self.status.value,
|
||||
"content": json.dumps(self.content),
|
||||
"createtime": self.createtime.isoformat(),
|
||||
"updatetime": self.updatetime.isoformat(),
|
||||
"priority": self.priority.value,
|
||||
"source": self.source,
|
||||
"retry_count": self.retry_count,
|
||||
"expire_time": self.expire_time.isoformat() if self.expire_time else "null",
|
||||
"tags": self.tags if self.tags else "null",
|
||||
"metadata": json.dumps(self.metadata),
|
||||
"result": json.dumps(self.result),
|
||||
"destination": self.destination,
|
||||
}
|
||||
|
||||
|
||||
def to_json(self) -> str:
|
||||
"""转换为json字符串"""
|
||||
# 将枚举类型转换为字符串
|
||||
@@ -210,8 +223,8 @@ class MessageItem:
|
||||
|
||||
descriptions = {}
|
||||
for field_info in fields(cls):
|
||||
if 'description' in field_info.metadata:
|
||||
descriptions[field_info.name] = field_info.metadata['description']
|
||||
if "description" in field_info.metadata:
|
||||
descriptions[field_info.name] = field_info.metadata["description"]
|
||||
else:
|
||||
descriptions[field_info.name] = "无描述信息"
|
||||
|
||||
@@ -229,6 +242,6 @@ class MessageItem:
|
||||
print(f"默认值: {field_info.default}")
|
||||
if field_info.default_factory is not None:
|
||||
print(f"默认工厂: {field_info.default_factory}")
|
||||
if 'description' in field_info.metadata:
|
||||
if "description" in field_info.metadata:
|
||||
print(f"描述: {field_info.metadata['description']}")
|
||||
print("-" * 50)
|
||||
|
||||
Reference in New Issue
Block a user