Coverage for class_generator/formatters/template_renderer.py: 86%
14 statements
« prev ^ index » next coverage.py v7.10.1, created at 2025-07-29 12:31 +0300
« prev ^ index » next coverage.py v7.10.1, created at 2025-07-29 12:31 +0300
1"""Jinja template rendering for resource generation."""
3import sys
4from typing import Any
6from jinja2 import DebugUndefined, Environment, FileSystemLoader, meta
7from simple_logger.logger import get_logger
9LOGGER = get_logger(name=__name__)
12def render_jinja_template(template_dict: dict[Any, Any], template_dir: str, template_name: str) -> str:
13 """
14 Render a Jinja template with the provided context.
16 Args:
17 template_dict: Dictionary of variables to pass to the template
18 template_dir: Directory containing the template
19 template_name: Name of the template file
21 Returns:
22 Rendered template as string
23 """
24 env = Environment(
25 loader=FileSystemLoader(template_dir),
26 trim_blocks=True,
27 lstrip_blocks=True,
28 undefined=DebugUndefined,
29 )
31 template = env.get_template(name=template_name)
32 rendered = template.render(template_dict)
33 undefined_variables = meta.find_undeclared_variables(env.parse(rendered))
35 if undefined_variables:
36 LOGGER.error(f"The following variables are undefined: {undefined_variables}")
37 sys.exit(1)
39 return rendered