first commit
This commit is contained in:
36
reporting/service.py
Normal file
36
reporting/service.py
Normal file
@@ -0,0 +1,36 @@
|
||||
from core.schemas.config import PluginPackagesConfig, ResolvedReportOutput
|
||||
from reporting.bootstrap import build_renderer_registry, build_transport_registry
|
||||
from reporting.models import AuditReport, ModuleAuditResult, PluginRuntimeError, RenderedReport
|
||||
from reporting.registry import RendererRegistry
|
||||
from reporting.transport_registry import TransportRegistry
|
||||
|
||||
|
||||
class ReportService:
|
||||
def __init__(
|
||||
self,
|
||||
renderer_registry: RendererRegistry | None = None,
|
||||
transport_registry: TransportRegistry | None = None,
|
||||
plugin_packages: PluginPackagesConfig | None = None,
|
||||
) -> None:
|
||||
self._renderer_registry = renderer_registry or build_renderer_registry(plugin_packages)
|
||||
self._transport_registry = transport_registry or build_transport_registry(plugin_packages)
|
||||
|
||||
def build_report(
|
||||
self,
|
||||
results: list[ModuleAuditResult],
|
||||
exit_code: int,
|
||||
plugin_errors: list[PluginRuntimeError] | None = None,
|
||||
) -> AuditReport:
|
||||
return AuditReport(results=results, exit_code=exit_code, plugin_errors=plugin_errors or [])
|
||||
|
||||
def render(self, report: AuditReport, report_config: ResolvedReportOutput) -> RenderedReport:
|
||||
renderer = self._renderer_registry.get(report_config.renderer.type)
|
||||
return renderer.render(report, report_config.renderer.config)
|
||||
|
||||
def publish(self, report: AuditReport, report_config: ResolvedReportOutput) -> str:
|
||||
rendered_report = self.render(report, report_config)
|
||||
transport = self._transport_registry.get(report_config.transport.type)
|
||||
return transport.publish(rendered_report, report_config.transport)
|
||||
|
||||
def publish_many(self, report: AuditReport, outputs: list[ResolvedReportOutput]) -> list[str]:
|
||||
return [self.publish(report, output) for output in outputs]
|
||||
Reference in New Issue
Block a user