Source code for lanyard.http.httpx.httpx

from types import TracebackType
from typing import Optional, Self, Type, Any

from httpx import AsyncClient, Response

from lanyard.http.base import BaseHTTP
from lanyard.http.response import HTTPResponse
from lanyard.http.exception import HTTPError

from .exception import ContextRequiredError


[docs] class HTTPX(BaseHTTP): # TODO: Requires write description for this code def __init__( self, base_url: str, raise_for_status: bool = True, timeout: Optional[float] = None, ) -> None: self.base_url: str = base_url self.raise_for_status: bool = raise_for_status self.timeout: Optional[float] = timeout self._session: Optional[AsyncClient] = None super().__init__( base_url=self.base_url, raise_for_status=self.raise_for_status, timeout=self.timeout, ) async def __aenter__(self) -> Self: if self._session is None: self._session = AsyncClient( base_url=self.base_url, timeout=self.timeout, ) return self async def __aexit__( self, exc_type: Optional[Type[BaseException]], exc_val: Optional[BaseException], exc_tb: Optional[TracebackType], ) -> None: if self._session is not None: await self._session.aclose() @property def session(self) -> AsyncClient: if not self._session: raise ContextRequiredError() return self._session async def _request( self, method: str, url: str, **kwargs: Any, ) -> HTTPResponse: try: response: Response = await self.session.request( method=method, url=url, **kwargs, ) return HTTPResponse( method=method, url=url, status_code=response.status_code, content=response.content, ) except Exception as exc: raise HTTPError( method=method, url=url, message=str(exc), )
__all__ = ["HTTPX"]