Использовать dataclass#

Адаптер dataclass входит в ядро. Поля Python напрямую соответствуют именам в данных API:

# examples/docs/integration_dataclass_model.py
@dataclass(frozen=True, slots=True)
class 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 dataclass model adapter."""

from __future__ import annotations

from dataclasses import dataclass

from eazy_sdk import Http, HttpOperation, SyncApi, op

from .guide_site import GuideSite, guide_client


# docs:integration-dataclass-model:start
# examples/docs/integration_dataclass_model.py
@dataclass(frozen=True, slots=True)
class 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-dataclass-model:end


def main() -> None:
    with guide_client(GuideSite()) as client:
        message = MessagesApi(client).get()
    print(f"dataclass: {message.id} {message.subject}")


if __name__ == "__main__":
    main()
dataclass: 42 План на пятницу

Вложенные dataclass, коллекции, optional-поля и значения по умолчанию проходят через общий ModelAdapterRegistry. Для другого имени в API используйте проекцию операции или Adaptix.

Дальше#