first commit
This commit is contained in:
81
reporting/bootstrap.py
Normal file
81
reporting/bootstrap.py
Normal file
@@ -0,0 +1,81 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass
|
||||
|
||||
from core.base import BaseRenderer, BaseTransport
|
||||
from core.plugin_types import PluginGroupConfig, PluginLoadError, discover_plugins
|
||||
from core.schemas.config import PluginPackagesConfig
|
||||
from reporting.registry import RendererRegistry
|
||||
from reporting.transport_registry import TransportRegistry
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class ReportingBootstrapResult:
|
||||
renderer_registry: RendererRegistry
|
||||
transport_registry: TransportRegistry
|
||||
errors: list[PluginLoadError]
|
||||
|
||||
|
||||
def bootstrap_reporting(plugin_packages: PluginPackagesConfig) -> ReportingBootstrapResult:
|
||||
renderer_descriptors, renderer_errors = discover_plugins(
|
||||
PluginGroupConfig(
|
||||
package_names=plugin_packages.renderers,
|
||||
entry_point_group="hydrogen.renderers",
|
||||
plugin_kind="renderer",
|
||||
),
|
||||
BaseRenderer,
|
||||
)
|
||||
transport_descriptors, transport_errors = discover_plugins(
|
||||
PluginGroupConfig(
|
||||
package_names=plugin_packages.transports,
|
||||
entry_point_group="hydrogen.transports",
|
||||
plugin_kind="transport",
|
||||
),
|
||||
BaseTransport,
|
||||
)
|
||||
|
||||
errors = [*renderer_errors, *transport_errors]
|
||||
|
||||
renderer_registry = RendererRegistry()
|
||||
for descriptor in renderer_descriptors:
|
||||
try:
|
||||
renderer_registry.register(descriptor.plugin)
|
||||
except ValueError as exc:
|
||||
errors.append(
|
||||
PluginLoadError(
|
||||
plugin_kind="renderer",
|
||||
source=descriptor.source,
|
||||
message=str(exc),
|
||||
)
|
||||
)
|
||||
|
||||
transport_registry = TransportRegistry()
|
||||
for descriptor in transport_descriptors:
|
||||
try:
|
||||
transport_registry.register(descriptor.plugin)
|
||||
except ValueError as exc:
|
||||
errors.append(
|
||||
PluginLoadError(
|
||||
plugin_kind="transport",
|
||||
source=descriptor.source,
|
||||
message=str(exc),
|
||||
)
|
||||
)
|
||||
|
||||
return ReportingBootstrapResult(
|
||||
renderer_registry=renderer_registry,
|
||||
transport_registry=transport_registry,
|
||||
errors=errors,
|
||||
)
|
||||
|
||||
|
||||
def build_renderer_registry(
|
||||
plugin_packages: PluginPackagesConfig | None = None,
|
||||
) -> RendererRegistry:
|
||||
return bootstrap_reporting(plugin_packages or PluginPackagesConfig()).renderer_registry
|
||||
|
||||
|
||||
def build_transport_registry(
|
||||
plugin_packages: PluginPackagesConfig | None = None,
|
||||
) -> TransportRegistry:
|
||||
return bootstrap_reporting(plugin_packages or PluginPackagesConfig()).transport_registry
|
||||
Reference in New Issue
Block a user