Подключить msgspec#
Установите extra msgspec:
uv add "eazy-sdk-core[msgspec]"
rename задаёт имя поля в данных API, не меняя имя атрибута Python:
# examples/docs/integration_msgspec_model.py
class Message(msgspec.Struct, frozen=True, rename={"message_id": "id"}):
message_id: int
subject: str
@dataclass(frozen=True, slots=True)
class GetMessage(HttpOperation[Message]):
__http__ = Http.get("/messages/42")
class MessagesApi(SyncApi):
get = op(GetMessage)
Файл целиком
"""Parse a response with the built-in msgspec model adapter."""
from __future__ import annotations
from dataclasses import dataclass
import msgspec
from eazy_sdk import Http, HttpOperation, SyncApi, op
from .guide_site import GuideSite, guide_client
# docs:integration-msgspec-model:start
# examples/docs/integration_msgspec_model.py
class Message(msgspec.Struct, frozen=True, rename={"message_id": "id"}):
message_id: int
subject: str
@dataclass(frozen=True, slots=True)
class GetMessage(HttpOperation[Message]):
__http__ = Http.get("/messages/42")
class MessagesApi(SyncApi):
get = op(GetMessage)
# docs:integration-msgspec-model:end
def main() -> None:
with guide_client(GuideSite()) as client:
message = MessagesApi(client).get()
print(f"msgspec: {message.message_id} {message.subject}")
if __name__ == "__main__":
main()
msgspec: 42 План на пятницу
Адаптер читает rename класса и msgspec.field(name=...). frozen=True сообщает SDK, что
модель нельзя изменить при эволюции подписанного или спроецированного значения.