Source code for betty.render

"""
Provide the Render API.
"""

from pathlib import Path

from betty.locale import Localizer
from betty.job import Context


[docs] class Renderer: @property def file_extensions(self) -> set[str]: raise NotImplementedError(repr(self))
[docs] async def render_file( self, file_path: Path, *, job_context: Context | None = None, localizer: Localizer | None = None, ) -> Path: raise NotImplementedError(repr(self))
[docs] class SequentialRenderer(Renderer): def __init__(self, renderers: list[Renderer]): self._renderers = renderers self._file_extensions = { file_extension for renderer in self._renderers for file_extension in renderer.file_extensions } @property def file_extensions(self) -> set[str]: return self._file_extensions
[docs] async def render_file( self, file_path: Path, *, job_context: Context | None = None, localizer: Localizer | None = None, ) -> Path: for renderer in self._renderers: if file_path.suffix in renderer.file_extensions: return await self.render_file( await renderer.render_file( file_path, job_context=job_context, localizer=localizer, ) ) return file_path