Source code for imednet.core.factory

"""
Factory for creating HTTP clients.

This module encapsulates the creation logic for `Client` and `AsyncClient`,
handling authentication, configuration, and retry policies.
"""

from __future__ import annotations

from imednet.auth.api_key import ApiKeyAuth
from imednet.config import Config
from imednet.core.async_client import AsyncClient
from imednet.core.client import Client
from imednet.core.retry import RetryPolicy


[docs]class ClientFactory: """Factory for creating API clients."""
[docs] @staticmethod def create_client( config: Config, timeout: float = 30.0, retries: int = 3, backoff_factor: float = 1.0, retry_policy: RetryPolicy | None = None, ) -> Client: """Create a synchronous client.""" auth = ApiKeyAuth(config.api_key, config.security_key) return Client( api_key=config.api_key, security_key=config.security_key, base_url=config.base_url, timeout=timeout, retries=retries, backoff_factor=backoff_factor, retry_policy=retry_policy, auth=auth, )
[docs] @staticmethod def create_async_client( config: Config, timeout: float = 30.0, retries: int = 3, backoff_factor: float = 1.0, retry_policy: RetryPolicy | None = None, ) -> AsyncClient: """Create an asynchronous client.""" auth = ApiKeyAuth(config.api_key, config.security_key) return AsyncClient( api_key=config.api_key, security_key=config.security_key, base_url=config.base_url, timeout=timeout, retries=retries, backoff_factor=backoff_factor, retry_policy=retry_policy, auth=auth, )