From 12c802627ec635d7f61d8c9ea77fa15d48da698b Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 12 Feb 2026 21:40:23 +0000 Subject: [PATCH] Fix Jinja2 uuid() function call syntax for Tera compatibility Tera doesn't support Jinja2 function call syntax like {{ uuid() }}. The uuid value is already injected as a context variable, so we just need to convert {{ uuid() }} to {{ uuid }} before rendering. Added preprocess_jinja2_compat() that handles Jinja2->Tera syntax transformations, applied in both render_query and render_inline_template. https://claude.ai/code/session_01ShAyjRLWBYC3tPsusCxggv --- src/core/templating.rs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/core/templating.rs b/src/core/templating.rs index 7466435..b69b4b0 100644 --- a/src/core/templating.rs +++ b/src/core/templating.rs @@ -232,6 +232,15 @@ fn split_dict_entries(s: &str) -> Vec { entries } +/// Pre-process Jinja2-specific syntax into Tera-compatible equivalents. +/// Currently handles: +/// - `{{ uuid() }}` -> `{{ uuid }}` (Jinja2 function call to Tera variable) +fn preprocess_jinja2_compat(template: &str) -> String { + // Convert {{ uuid() }} to {{ uuid }} + let re = Regex::new(r"\{\{\s*uuid\(\)\s*\}\}").unwrap(); + re.replace_all(template, "{{ uuid }}").to_string() +} + /// Render a single query template with the given context. /// This is the JIT rendering function called when a query is actually needed. pub fn render_query( @@ -249,7 +258,8 @@ pub fn render_query( ); let mut ctx = temp_context; - let processed_query = preprocess_inline_dicts(template, &mut ctx); + let compat_query = preprocess_jinja2_compat(template); + let processed_query = preprocess_inline_dicts(&compat_query, &mut ctx); let template_name = format!("{}__{}", res_name, anchor); match engine.render_with_filters(&template_name, &processed_query, &ctx) { @@ -343,7 +353,8 @@ pub fn render_inline_template( ); let mut temp_context = prepare_query_context(full_context); - let processed = preprocess_inline_dicts(template_string, &mut temp_context); + let compat = preprocess_jinja2_compat(template_string); + let processed = preprocess_inline_dicts(&compat, &mut temp_context); let template_name = format!("{}__inline", resource_name); match engine.render_with_filters(&template_name, &processed, &temp_context) {