Files
hydrogen/reporting/registry.py
2026-07-11 23:54:36 +07:00

33 lines
1.1 KiB
Python

from collections.abc import Iterable
from core.base import BaseRenderer
class RendererRegistry:
def __init__(self, renderers: Iterable[BaseRenderer] | None = None) -> None:
self._renderers: dict[str, BaseRenderer] = {}
for renderer in renderers or ():
self.register(renderer)
def register(self, renderer: BaseRenderer) -> None:
self._register_key(renderer.content_type, renderer)
for alias in renderer.aliases:
self._register_key(alias, renderer)
def _register_key(self, key: str, renderer: BaseRenderer) -> None:
if key in self._renderers:
registered = self._renderers[key]
raise ValueError(
f"Renderer key '{key}' is already registered by {type(registered).__name__}"
)
self._renderers[key] = renderer
def get(self, content_type: str) -> BaseRenderer:
try:
return self._renderers[content_type]
except KeyError as exc:
raise ValueError(
f"Renderer for content type '{content_type}' is not registered"
) from exc