Получить типизированное значение и метаданные#

HttpOperation[Order] объявляет обычный успешный ответ: статус 200, JSON-тело и модель Order. Метод with_response(...) выполняет ту же операцию, но возвращает ResponseEnvelope[Order] с HTTP-метаданными.

Дополнительное объявление не нужно.

→ Request · GET /orders/order-42

← Response · 200 OK

X-Request-ID: request-42
Content-Type: application/json

{"id": "order-42", "status": "paid", "total": 12900}
# examples/docs/response_success.py
@dataclass(frozen=True, slots=True, kw_only=True)
class GetOrder(HttpOperation[Order]):
    __http__ = Http.get("/orders/{order_id}")

    order_id: Path[str]


class OrdersApi(SyncApi):
    get = op(GetOrder)

Обычный get(...) вернул бы Order. В примере .with_response(...) сохраняет его в .value, статус в .status_code, заголовки в .headers, а исходный объект обработчика в .response.raw_response.

Файл примера целиком
"""Read a typed value together with HTTP response metadata."""

from __future__ import annotations

from dataclasses import dataclass

from eazy_sdk import Http, HttpOperation, Path, SyncApi, op
from examples.docs.request_site import request_client


@dataclass(frozen=True, slots=True)
class Order:
    id: str
    status: str
    total: int


# docs:example:start
# examples/docs/response_success.py
@dataclass(frozen=True, slots=True, kw_only=True)
class GetOrder(HttpOperation[Order]):
    __http__ = Http.get("/orders/{order_id}")

    order_id: Path[str]


class OrdersApi(SyncApi):
    get = op(GetOrder)
# docs:example:end


def main() -> None:
    with request_client() as client:
        response = OrdersApi(client).get.with_response(order_id="order-42")

    print(f"status: {response.status_code}")
    print(f"order: {response.value.id} {response.value.status}")
    print(f"request id: {response.headers['x-request-id']}")


if __name__ == "__main__":
    main()

Запуск: uv run python examples/docs/response_success.py.

status: 200
order: order-42 paid
request id: request-42

Объявить несколько успешных случаев#

Используйте success=, когда операция возвращает разные модели или особый статус. Например, success={201: Order, 202: AcceptedOrder} различает созданный и принятый в обработку заказ.

Значением может быть модель, Json, Text, Bytes, Empty или список представлений. Условие when= различает формы с одинаковым статусом. Тип результата операции должен включать все возможные значения. Строка str означает текст, bytes означает бинарное тело, а None означает пустой ответ. Явные представления нужны, когда контракт задаёт особый тип содержимого, условие или способ разбора.

Дальше#