Source code for dataset_hub._core.provider.provider_factory

from typing import Any, Dict, Type

from .dataframe_provider import DataFrameProvider
from .provider import Provider


[docs]class ProviderFactory: """ Factory to build :ref:`providers` instances based on a configuration dictionary. Uses a simple strategy pattern: selects the provider class by 'type' key in config. """ # Registry mapping type string -> Provider class _REGISTRY: Dict[str, Type[Provider[Any]]] = {"dataframe": DataFrameProvider}
[docs] @classmethod def build_provider(cls, provider_config: Dict[str, Any]) -> Provider[Any]: """ Build a Provider instance from a configuration dictionary. Args: provider_config (Dict[str, Any]): The configuration dict with at least a 'type' and 'params' keys. Returns: Provider: An instance of the appropriate Provider subclass. Raises: ValueError: If the type is not registered. """ provider_type = provider_config.get("type") if not provider_type: raise ValueError("Provider config must include a 'type' key") provider_params = provider_config.get("params") if not provider_params: raise ValueError("Provider config must include a 'params' key") provider_cls = cls._REGISTRY.get(provider_type) if not provider_cls: raise ValueError(f"No provider registered for type '{provider_type}'") return provider_cls(provider_params)