Подключить 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.