корректные pydantic модели для автоматического определения класса по полю type
This commit is contained in:
parent
b34cbaf677
commit
1e256a545b
11 changed files with 294 additions and 148 deletions
33
lambda_agent_api/client.py
Normal file
33
lambda_agent_api/client.py
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
from enum import Enum
|
||||
from pydantic import BaseModel, Field, TypeAdapter
|
||||
from typing import Annotated, Union, Literal
|
||||
|
||||
|
||||
__all__ = ['EClientMessage', 'MsgUserMessage', 'ClientMessage']
|
||||
|
||||
|
||||
class EClientMessage(str, Enum):
|
||||
USER_MESSAGE = "USER_MESSAGE"
|
||||
|
||||
|
||||
class MsgUserMessage(BaseModel):
|
||||
"""
|
||||
Полное сообщение от пользователя.
|
||||
"""
|
||||
type: Literal[EClientMessage.USER_MESSAGE] = EClientMessage.USER_MESSAGE
|
||||
text: str
|
||||
"""
|
||||
Текст сообщения.
|
||||
"""
|
||||
|
||||
|
||||
ClientMessage = TypeAdapter(Annotated[
|
||||
Union[MsgUserMessage,],
|
||||
Field(discriminator="type")
|
||||
])
|
||||
"""
|
||||
Объединяет все типы входящих сообщений в одно для удобной автоматической десериализации.\n
|
||||
Pydantic сам определит нужный тип в зависимости от поля ``type``.\n
|
||||
Использование:\n
|
||||
msg = ClientMessage.model_validate_json(json)
|
||||
"""
|
||||
Loading…
Add table
Add a link
Reference in a new issue