Skip to content

Commit 23f66f9

Browse files
authored
Fix: Make macro evaluator locals available from macro calls in jinja (#5568)
1 parent c94f501 commit 23f66f9

File tree

2 files changed

+25
-8
lines changed

2 files changed

+25
-8
lines changed

sqlmesh/core/renderer.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,14 @@ def _resolve_table(table: str | exp.Table) -> str:
196196
**kwargs,
197197
}
198198

199+
if this_model:
200+
render_kwargs["this_model"] = this_model
201+
202+
macro_evaluator.locals.update(render_kwargs)
203+
199204
variables = kwargs.pop("variables", {})
205+
if variables:
206+
macro_evaluator.locals.setdefault(c.SQLMESH_VARS, {}).update(variables)
200207

201208
expressions = [self._expression]
202209
if isinstance(self._expression, d.Jinja):
@@ -268,14 +275,6 @@ def _resolve_table(table: str | exp.Table) -> str:
268275
f"Could not parse the rendered jinja at '{self._path}'.\n{ex}"
269276
) from ex
270277

271-
if this_model:
272-
render_kwargs["this_model"] = this_model
273-
274-
macro_evaluator.locals.update(render_kwargs)
275-
276-
if variables:
277-
macro_evaluator.locals.setdefault(c.SQLMESH_VARS, {}).update(variables)
278-
279278
for definition in self._macro_definitions:
280279
try:
281280
macro_evaluator.evaluate(definition)

tests/core/test_model.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12158,3 +12158,21 @@ def test_grants_empty_values():
1215812158
def test_grants_table_type(kind: t.Union[str, _ModelKind], expected: DataObjectType):
1215912159
model = create_sql_model("test_table", parse_one("SELECT 1 as id"), kind=kind)
1216012160
assert model.grants_table_type == expected
12161+
12162+
12163+
def test_model_macro_using_locals_called_from_jinja(assert_exp_eq) -> None:
12164+
@macro()
12165+
def execution_date(evaluator):
12166+
return f"""'{evaluator.locals.get("execution_date")}'"""
12167+
12168+
expressions = d.parse(
12169+
"""
12170+
MODEL (name db.table);
12171+
12172+
JINJA_QUERY_BEGIN;
12173+
SELECT {{ execution_date() }} AS col;
12174+
JINJA_END;
12175+
"""
12176+
)
12177+
model = load_sql_based_model(expressions)
12178+
assert_exp_eq(model.render_query(), '''SELECT '1970-01-01' AS "col"''')

0 commit comments

Comments
 (0)