From 28a5f0e90ec9177f8d11b7aaccb61235d1d7a51b Mon Sep 17 00:00:00 2001 From: George Sittas Date: Tue, 23 Sep 2025 12:57:23 +0300 Subject: [PATCH] Fix: warn on dbt variable definition failure instead of raising --- sqlmesh/dbt/context.py | 5 ++++- tests/dbt/test_config.py | 2 ++ tests/fixtures/dbt/sushi_test/dbt_project.yml | 3 +++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/sqlmesh/dbt/context.py b/sqlmesh/dbt/context.py index a56a6ca4d6..67e70d3c79 100644 --- a/sqlmesh/dbt/context.py +++ b/sqlmesh/dbt/context.py @@ -1,5 +1,6 @@ from __future__ import annotations +import logging import typing as t from dataclasses import dataclass, field, replace from pathlib import Path @@ -28,6 +29,8 @@ from sqlmesh.dbt.seed import SeedConfig from sqlmesh.dbt.source import SourceConfig +logger = logging.getLogger(__name__) + @dataclass class DbtContext: @@ -125,7 +128,7 @@ def _var(name: str, default: t.Optional[t.Any] = None) -> t.Any: try: rendered_variables[k] = _render_var(v) except Exception as ex: - raise ConfigError(f"Failed to render variable '{k}', value '{v}': {ex}") from ex + logger.warning(f"Failed to render variable '{k}', value '{v}': {ex}") self.variables = rendered_variables diff --git a/tests/dbt/test_config.py b/tests/dbt/test_config.py index 0e96024aa1..c484b8e126 100644 --- a/tests/dbt/test_config.py +++ b/tests/dbt/test_config.py @@ -352,6 +352,7 @@ def test_variables(assert_exp_eq, sushi_test_project): "some_var": ["foo", "bar"], }, "some_var": "should be overridden in customers package", + "invalid_var": "{{ ref('ref_without_closing_paren' }}", } expected_customer_variables = { "some_var": ["foo", "bar"], # Takes precedence over the root project variable @@ -370,6 +371,7 @@ def test_variables(assert_exp_eq, sushi_test_project): {"name": "item1", "value": 1}, {"name": "item2", "value": 2}, ], + "invalid_var": "{{ ref('ref_without_closing_paren' }}", } assert sushi_test_project.packages["sushi"].variables == expected_sushi_variables assert sushi_test_project.packages["customers"].variables == expected_customer_variables diff --git a/tests/fixtures/dbt/sushi_test/dbt_project.yml b/tests/fixtures/dbt/sushi_test/dbt_project.yml index 920dea7216..0b5f6b0f83 100644 --- a/tests/fixtures/dbt/sushi_test/dbt_project.yml +++ b/tests/fixtures/dbt/sushi_test/dbt_project.yml @@ -66,6 +66,9 @@ vars: - name: 'item2' value: 2 + # Despite this being an invalid variable definition, dbt doesn't mind if it's unused + invalid_var: "{{ ref('ref_without_closing_paren' }}" + on-run-start: - 'CREATE TABLE IF NOT EXISTS analytic_stats (physical_table VARCHAR, evaluation_time VARCHAR);'