| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- from __future__ import annotations
- import typing
- from types import TracebackType
- from .._models import Request, Response
- T = typing.TypeVar("T", bound="BaseTransport")
- A = typing.TypeVar("A", bound="AsyncBaseTransport")
- __all__ = ["AsyncBaseTransport", "BaseTransport"]
- class BaseTransport:
- def __enter__(self: T) -> T:
- return self
- def __exit__(
- self,
- exc_type: type[BaseException] | None = None,
- exc_value: BaseException | None = None,
- traceback: TracebackType | None = None,
- ) -> None:
- self.close()
- def handle_request(self, request: Request) -> Response:
- """
- Send a single HTTP request and return a response.
- Developers shouldn't typically ever need to call into this API directly,
- since the Client class provides all the higher level user-facing API
- niceties.
- In order to properly release any network resources, the response
- stream should *either* be consumed immediately, with a call to
- `response.stream.read()`, or else the `handle_request` call should
- be followed with a try/finally block to ensuring the stream is
- always closed.
- Example usage:
- with httpx.HTTPTransport() as transport:
- req = httpx.Request(
- method=b"GET",
- url=(b"https", b"www.example.com", 443, b"/"),
- headers=[(b"Host", b"www.example.com")],
- )
- resp = transport.handle_request(req)
- body = resp.stream.read()
- print(resp.status_code, resp.headers, body)
- Takes a `Request` instance as the only argument.
- Returns a `Response` instance.
- """
- raise NotImplementedError(
- "The 'handle_request' method must be implemented."
- ) # pragma: no cover
- def close(self) -> None:
- pass
- class AsyncBaseTransport:
- async def __aenter__(self: A) -> A:
- return self
- async def __aexit__(
- self,
- exc_type: type[BaseException] | None = None,
- exc_value: BaseException | None = None,
- traceback: TracebackType | None = None,
- ) -> None:
- await self.aclose()
- async def handle_async_request(
- self,
- request: Request,
- ) -> Response:
- raise NotImplementedError(
- "The 'handle_async_request' method must be implemented."
- ) # pragma: no cover
- async def aclose(self) -> None:
- pass
|