Source code for lanyard.client

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

from .service import ServiceContext, UserService, KVService
from .config import LanyardConfig
from .http import BaseHTTP, HTTPX


[docs] class LanyardClient: def __init__( self, http: Optional[BaseHTTP] = None, config: Optional[LanyardConfig] = None, ) -> None: """ The main client class for working with the Lanyard API, implementing an asynchronous context manager. :param http: HTTP client for making requests :param config: Client configuration """ self.config: LanyardConfig = self._build_config( config=config, ) self._http: BaseHTTP = self._build_http_client( http=http, base_url=self.config.url, timeout=self.config.timeout, raise_for_status=self.config.raise_for_status, ) self._context: ServiceContext = ServiceContext( config=self.config, http=self._http, ) self.user: UserService = UserService( context=self._context, ) self.kv: KVService = KVService( context=self._context, ) @staticmethod def _build_config( config: Optional[LanyardConfig] = None, ) -> LanyardConfig: if config is None: return LanyardConfig() return config @staticmethod def _build_http_client( base_url: str, raise_for_status: bool = True, http: Optional[BaseHTTP] = None, timeout: Optional[float] = None, ) -> BaseHTTP: if http is not None: return http return HTTPX( base_url=base_url, timeout=timeout, raise_for_status=raise_for_status, ) async def __aenter__(self) -> Self: if hasattr(self._http, "__aenter__"): await self._http.__aenter__() return self async def __aexit__( self, exc_type: Optional[Type[BaseException]], exc_val: Optional[BaseException], exc_tb: Optional[TracebackType], ) -> None: if hasattr(self._http, "__aexit__"): await self._http.__aexit__(exc_type, exc_val, exc_tb)
__all__ = ["LanyardClient"]