| # src/generation/renderer.py — Low-level template renderer (engine delegates to this via model) | |
| from __future__ import annotations | |
| from pathlib import Path | |
| from typing import Any, Dict | |
| from jinja2 import Environment, FileSystemLoader, TemplateNotFound | |
| class TemplateRenderer: | |
| """Low-level Jinja2 rendering utility used by TemplateModel.""" | |
| def __init__(self, templates_dir: str): | |
| self.templates_dir = Path(templates_dir) | |
| if not self.templates_dir.exists(): | |
| raise FileNotFoundError(f"Templates directory not found: {templates_dir}") | |
| self.env = Environment(loader=FileSystemLoader(str(self.templates_dir))) | |
| def render(self, template_name: str, context: Dict[str, Any]) -> str: | |
| try: | |
| tmpl = self.env.get_template(template_name) | |
| return tmpl.render(**context) | |
| except TemplateNotFound: | |
| raise FileNotFoundError(f"Template not found: {template_name}") | |