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

1"""Jinja template rendering for resource generation.""" 

2 

3import sys 

4from typing import Any 

5 

6from jinja2 import DebugUndefined, Environment, FileSystemLoader, meta 

7from simple_logger.logger import get_logger 

8 

9LOGGER = get_logger(name=__name__) 

10 

11 

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. 

15  

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 

20  

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 ) 

30 

31 template = env.get_template(name=template_name) 

32 rendered = template.render(template_dict) 

33 undefined_variables = meta.find_undeclared_variables(env.parse(rendered)) 

34 

35 if undefined_variables: 

36 LOGGER.error(f"The following variables are undefined: {undefined_variables}") 

37 sys.exit(1) 

38 

39 return rendered