Source code for flameiq.providers.registry

"""FlameIQ provider registry.

Maps provider name strings to provider classes.
Add new providers here to make them available via ``--provider <name>``.
"""

from __future__ import annotations

from typing import TYPE_CHECKING

from flameiq.core.errors import ProviderNotFoundError
from flameiq.providers.json_provider import JsonProvider
from flameiq.providers.pytest_provider import PytestBenchmarkProvider

if TYPE_CHECKING:
    from flameiq.providers.base import MetricProvider

#: Mutable registry — add custom providers here.
PROVIDER_REGISTRY: dict[str, type[MetricProvider]] = {
    "json": JsonProvider,
    "pytest-benchmark": PytestBenchmarkProvider,
}


[docs] def get_provider(name: str) -> MetricProvider: """Instantiate a registered provider by name. Args: name: Provider identifier, e.g. ``'json'`` or ``'pytest-benchmark'``. Returns: An instantiated :class:`~flameiq.providers.base.MetricProvider`. Raises: :class:`~flameiq.core.errors.ProviderNotFoundError`: If *name* is not in :data:`PROVIDER_REGISTRY`. """ cls = PROVIDER_REGISTRY.get(name) if cls is None: raise ProviderNotFoundError(name) return cls()
[docs] def list_providers() -> list[str]: """Return all registered provider names, sorted alphabetically.""" return sorted(PROVIDER_REGISTRY.keys())