88
99from pathlib import Path
1010
11+ import jinja2
1112from jinja2 .exceptions import TemplateError , TemplateNotFound
1213
1314from .config import PathSpec
@@ -30,29 +31,22 @@ def __init__(self, config_path: PathSpec, page_number: int, **kwargs):
3031 )
3132 self .log_trace (self .config .readable ())
3233
33- def process (self ) -> Path :
34- """Render SVG template and convert to PDF."""
35- self .log_debug_subsection (
36- "Processing page %d: %s" , self .config .page_number , self .config .name
37- )
38-
39- self .log_debug ("Loading template: %s" , self .config .template .name )
40- if self .logger .isEnabledFor (TRACE ):
41- with open (self .config .template .path , encoding = "utf-8" ) as f :
42- self .log_trace_preview (f .read ())
43-
34+ def _load_jinja_template (self , undefined_vars ) -> jinja2 .Template :
4435 try :
45- jinja_extensions = self .config .jinja2_extensions
46- if jinja_extensions :
47- self .log_debug ("Using Jinja2 extensions: %s" , jinja_extensions )
36+ if self .config .jinja2_extensions :
37+ self .log_debug (
38+ "Using Jinja2 extensions: %s" , self .config .jinja2_extensions
39+ )
4840 jinja_env = create_env (
4941 templates_dir = self .config .template .path .parent ,
50- extensions = jinja_extensions ,
42+ extensions = self . config . jinja2_extensions ,
5143 template_filters = [
5244 filter .value for filter in self .config .template_filters
5345 ],
46+ undefined_vars = undefined_vars ,
47+ template_file = str (self .config .template .path ),
5448 )
55- template = jinja_env .get_template (self .config .template .path .name )
49+ return jinja_env .get_template (self .config .template .path .name )
5650 except TemplateNotFound as exc :
5751 raise SVGTemplateError (
5852 "Failed to load template for page "
@@ -64,16 +58,31 @@ def process(self) -> Path:
6458 f"{ self .config .page_number } ({ self .config .name } ): { exc } "
6559 ) from exc
6660
61+ def process (self ) -> Path :
62+ """Render SVG template and convert to PDF."""
63+ self .log_debug_subsection (
64+ "Processing page %d: %s" , self .config .page_number , self .config .name
65+ )
66+
67+ self .log_debug ("Loading template: %s" , self .config .template .name )
68+ if self .logger .isEnabledFor (TRACE ):
69+ with open (self .config .template .path , encoding = "utf-8" ) as f :
70+ self .log_trace_preview (f .read ())
71+
72+ undefined_vars = set ()
73+ template = self ._load_jinja_template (undefined_vars )
74+
6775 context = self .config .resolve_variables ().model_dump ()
6876 template_context = prepare_template_context (
6977 context = context ,
7078 images_dir = self .config .directories .images ,
7179 )
7280
7381 build_dir = self .config .directories .build
74- name = self .config .name
7582 if self .config .is_variant :
76- name = f'{ name } _{ self .config .variant ["name" ]} '
83+ name = f'{ self .config .name } _{ self .config .variant ["name" ]} '
84+ else :
85+ name = self .config .name
7786 output_svg = build_dir / f"{ self .config .page_number :03} _{ name } .svg"
7887 output_pdf = build_dir / f"{ self .config .page_number :03} _{ name } .pdf"
7988
@@ -85,6 +94,13 @@ def process(self) -> Path:
8594 renderer .value for renderer in self .config .template_renderers
8695 ],
8796 )
97+ if undefined_vars :
98+ for var , template_file in sorted (undefined_vars ):
99+ self .log_warning (
100+ 'Undefined variable "%s" in template %s' ,
101+ var ,
102+ template_file ,
103+ )
88104 if self .config .dry_run :
89105 self .log_debug (
90106 "👀 [DRY RUN] Not writing rendered template to %s" , output_svg
0 commit comments