Подключить HTTPX#

Установите extra httpx, если не ставили группу all:

uv add "eazy-sdk-core[httpx]"

Синхронный клиент#

    # examples/docs/integration_httpx.py
    with Client.httpx(base_url=base_url) as client:
        return MessageApi(client).message()

Асинхронный клиент#

    # examples/docs/integration_httpx.py
    async with AsyncClient.httpx(base_url=base_url) as client:
        return await AsyncMessageApi(client).message()

Обе фабрики создают HTTPX-клиент без автоматических перенаправлений. Контекстный менеджер закрывает пул соединений. AsyncClient.httpx(...) принимает параметры конструктора httpx.AsyncClient, а Client.httpx(...) параметры httpx.Client.

Файл целиком
"""Runnable HTTPX integration example for the documentation."""

from __future__ import annotations

import asyncio
from dataclasses import dataclass

from eazy_sdk import AsyncApi, AsyncClient, Client, Http, HttpOperation, SyncApi, op

from .guide_site import GuideSite, guide_origin


@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 MessageApi(SyncApi):
    message = op(GetMessage)


class AsyncMessageApi(AsyncApi):
    message = op(GetMessage)


def sync_message(base_url: str) -> Message:
    # docs:integration-httpx-sync:start
    # examples/docs/integration_httpx.py
    with Client.httpx(base_url=base_url) as client:
        return MessageApi(client).message()
    # docs:integration-httpx-sync:end


async def async_message(base_url: str) -> Message:
    # docs:integration-httpx-async:start
    # examples/docs/integration_httpx.py
    async with AsyncClient.httpx(base_url=base_url) as client:
        return await AsyncMessageApi(client).message()
    # docs:integration-httpx-async:end


async def main() -> None:
    site = GuideSite()
    with guide_origin(site) as base_url:
        sync = sync_message(base_url)
        asynchronous = await async_message(base_url)
    print(f"sync: {sync.id} {sync.subject}")
    print(f"async: {asynchronous.id} {asynchronous.subject}")


if __name__ == "__main__":
    asyncio.run(main())
sync: 42 План на пятницу
async: 42 План на пятницу

Чтобы использовать существующий пул, передайте client=. Eazy SDK не закроет переданный HTTPX-клиент. Параметр proxy= при этом только объявляет уже настроенный прокси в профиле обработчика; он не меняет конфигурацию чужого объекта.

HTTPX сохраняет повторяющиеся заголовки и готовые байты тела. Точный уровень возможностей зафиксирован в HTTPX_HANDLER_PROFILE и зависит от проверенной версии HTTPX.

Дальше#