Source code for demessaging.template

# SPDX-FileCopyrightText: 2019-2024 Helmholtz Centre Potsdam GFZ German Research Centre for Geosciences
# SPDX-FileCopyrightText: 2020-2021 Helmholtz-Zentrum Geesthacht GmbH
# SPDX-FileCopyrightText: 2021-2024 Helmholtz-Zentrum hereon GmbH
#
# SPDX-License-Identifier: Apache-2.0

import pathlib
from dataclasses import field
from typing import Any, Dict

import jinja2
from pydantic.dataclasses import dataclass  # pylint: disable=no-name-in-module

TEMPLATE_FOLDER = pathlib.Path(__file__).parent / "templates"


[docs] @dataclass class Template: """A convenience wrapper to render a jinja2 template.""" name: str folder: pathlib.Path = TEMPLATE_FOLDER suffix: str = ".jinja2" context: Dict[str, Any] = field(default_factory=dict) @property def path(self) -> pathlib.Path: return self.folder / (self.name + self.suffix) @property def renderer(self) -> Any: loader = jinja2.FileSystemLoader(str(self.folder), followlinks=True) env = jinja2.Environment(loader=loader) return env.get_template(self.name + self.suffix)
[docs] def render(self, **context) -> str: context.update(self.context) context["set"] = set return self.renderer.render(**context)