Skip to content

Commit 12c568e

Browse files
authored
Chore: Separate jinja rendering and parsing try blocks for more precise error output (#5330)
1 parent 90b6414 commit 12c568e

File tree

2 files changed

+29
-8
lines changed

2 files changed

+29
-8
lines changed

sqlmesh/core/renderer.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -239,17 +239,21 @@ def _resolve_table(table: str | exp.Table) -> str:
239239
logger.debug(
240240
f"Rendered Jinja expression for model '{self._model_fqn}' at '{self._path}': '{rendered_expression}'"
241241
)
242-
if rendered_expression.strip():
242+
except ParsetimeAdapterCallError:
243+
raise
244+
except Exception as ex:
245+
raise ConfigError(f"Could not render jinja at '{self._path}'.\n{ex}") from ex
246+
247+
if rendered_expression.strip():
248+
try:
243249
expressions = [e for e in parse(rendered_expression, read=self._dialect) if e]
244250

245251
if not expressions:
246252
raise ConfigError(f"Failed to parse an expression:\n{self._expression}")
247-
except ParsetimeAdapterCallError:
248-
raise
249-
except Exception as ex:
250-
raise ConfigError(
251-
f"Could not render or parse jinja at '{self._path}'.\n{ex}"
252-
) from ex
253+
except Exception as ex:
254+
raise ConfigError(
255+
f"Could not parse the rendered jinja at '{self._path}'.\n{ex}"
256+
) from ex
253257

254258
if this_model:
255259
render_kwargs["this_model"] = this_model

tests/core/test_model.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8588,6 +8588,23 @@ def test_comments_in_jinja_query():
85888588
model.render_query()
85898589

85908590

8591+
def test_jinja_render_parse_error():
8592+
expressions = d.parse(
8593+
"""
8594+
MODEL (name db.test_model);
8595+
8596+
JINJA_QUERY_BEGIN;
8597+
{{ unknown_macro() }}
8598+
JINJA_END;
8599+
"""
8600+
)
8601+
8602+
model = load_sql_based_model(expressions)
8603+
8604+
with pytest.raises(ConfigError, match=r"Could not render jinja"):
8605+
model.render_query()
8606+
8607+
85918608
def test_jinja_render_debug_logging(caplog):
85928609
"""Test that rendered Jinja expressions are logged for debugging."""
85938610
import logging
@@ -8609,7 +8626,7 @@ def test_jinja_render_debug_logging(caplog):
86098626
model = load_sql_based_model(expressions)
86108627

86118628
# Attempt to render - this should fail due to invalid SQL syntax
8612-
with pytest.raises(ConfigError, match=r"Could not render or parse jinja"):
8629+
with pytest.raises(ConfigError, match=r"Could not parse the rendered jinja"):
86138630
model.render_query()
86148631

86158632
# Check that the rendered Jinja was logged

0 commit comments

Comments
 (0)