Skip to content

Commit aab5225

Browse files
authored
Fix: Allow dbt project ref, source, and config macros to override the builtin version and use the logger for dbt logging macros (#1606)
1 parent 42ed0a3 commit aab5225

3 files changed

Lines changed: 35 additions & 30 deletions

File tree

sqlmesh/dbt/builtin.py

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ def raise_compiler_error(self, msg: str) -> None:
3737
raise CompilationException(msg)
3838

3939
def warn(self, msg: str) -> str:
40-
print(msg)
40+
logger.warning(msg)
4141
return ""
4242

4343

@@ -146,11 +146,7 @@ def env_var(name: str, default: t.Optional[str] = None) -> t.Optional[str]:
146146

147147

148148
def log(msg: str, info: bool = False) -> str:
149-
print(msg)
150-
return ""
151-
152-
153-
def no_log(msg: str, info: bool = False) -> str:
149+
logger.debug(msg)
154150
return ""
155151

156152

@@ -260,9 +256,9 @@ def _try_literal_eval(value: str) -> t.Any:
260256
"flags": Flags(),
261257
"fromjson": from_json,
262258
"fromyaml": from_yaml,
263-
"log": no_log,
259+
"log": log,
264260
"modules": Modules(),
265-
"print": no_log,
261+
"print": log,
266262
"return": return_val,
267263
"set": to_set,
268264
"set_strict": set,
@@ -337,14 +333,12 @@ def create_builtin_globals(
337333
table_mapping=jinja_globals.get("table_mapping", {}),
338334
is_dev=jinja_globals.get("is_dev", False),
339335
)
340-
builtin_globals.update({"log": log, "print": log})
341336
else:
342337
adapter = ParsetimeAdapter(
343338
jinja_macros,
344339
jinja_globals={**builtin_globals, **jinja_globals},
345340
dialect=dialect,
346341
)
347-
builtin_globals.update({"log": no_log, "print": no_log})
348342

349343
sql_execution = SQLExecution(adapter)
350344
builtin_globals.update(

sqlmesh/utils/jinja.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -271,9 +271,9 @@ def build_environment(self, **kwargs: t.Any) -> Environment:
271271

272272
env = environment()
273273

274+
context.update(self._create_builtin_globals(kwargs))
274275
context.update(root_macros)
275276
context.update(package_macros)
276-
context.update(self._create_builtin_globals(kwargs))
277277

278278
env.globals.update(context)
279279
env.filters.update(self._environment.filters)

tests/dbt/test_transformation.py

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import json
2+
import logging
23
import typing as t
34
from pathlib import Path
5+
from unittest.mock import patch
46

57
import agate
68
import pytest
@@ -214,22 +216,26 @@ def test_seed_columns():
214216

215217

216218
@pytest.mark.parametrize("model", ["sushi.waiters", "sushi.waiter_names"])
217-
def test_hooks(capsys, sushi_test_dbt_context: Context, model: str):
219+
def test_hooks(sushi_test_dbt_context: Context, model: str):
218220
engine_adapter = sushi_test_dbt_context.engine_adapter
219221
waiters = sushi_test_dbt_context.models[model]
220-
capsys.readouterr()
221222

222-
engine_adapter.execute(
223-
waiters.render_pre_statements(engine_adapter=engine_adapter, execution_time="2023-01-01")
224-
)
225-
assert "pre-hook" in capsys.readouterr().out
223+
logger = logging.getLogger("sqlmesh.dbt.builtin")
224+
with patch.object(logger, "debug") as mock_logger:
225+
engine_adapter.execute(
226+
waiters.render_pre_statements(
227+
engine_adapter=engine_adapter, execution_time="2023-01-01"
228+
)
229+
)
230+
assert "pre-hook" in mock_logger.call_args[0][0]
226231

227-
engine_adapter.execute(
228-
waiters.render_post_statements(
229-
engine_adapter=sushi_test_dbt_context.engine_adapter, execution_time="2023-01-01"
232+
with patch.object(logger, "debug") as mock_logger:
233+
engine_adapter.execute(
234+
waiters.render_post_statements(
235+
engine_adapter=sushi_test_dbt_context.engine_adapter, execution_time="2023-01-01"
236+
)
230237
)
231-
)
232-
assert "post-hook" in capsys.readouterr().out
238+
assert "post-hook" in mock_logger.call_args[0][0]
233239

234240

235241
def test_target_jinja(sushi_test_project: Project):
@@ -311,24 +317,29 @@ def test_run_query(sushi_test_project: Project, runtime_renderer: t.Callable):
311317
)
312318

313319

314-
def test_logging(capsys, sushi_test_project: Project, runtime_renderer: t.Callable):
320+
def test_logging(sushi_test_project: Project, runtime_renderer: t.Callable):
315321
context = sushi_test_project.context
316322
assert context.target
317323
engine_adapter = context.target.to_sqlmesh().create_engine_adapter()
318324
renderer = runtime_renderer(context, engine_adapter=engine_adapter)
319325

320-
assert renderer('{{ log("foo") }}') == ""
321-
assert "foo" in capsys.readouterr().out
326+
logger = logging.getLogger("sqlmesh.dbt.builtin")
327+
with patch.object(logger, "debug") as mock_logger:
328+
assert renderer('{{ log("foo") }}') == ""
329+
assert "foo" in mock_logger.call_args[0][0]
322330

323-
assert renderer('{{ print("bar") }}') == ""
324-
assert "bar" in capsys.readouterr().out
331+
with patch.object(logger, "debug") as mock_logger:
332+
assert renderer('{{ print("bar") }}') == ""
333+
assert "bar" in mock_logger.call_args[0][0]
325334

326335

327-
def test_exceptions(capsys, sushi_test_project: Project):
336+
def test_exceptions(sushi_test_project: Project):
328337
context = sushi_test_project.context
329338

330-
assert context.render('{{ exceptions.warn("Warning") }}') == ""
331-
assert "Warning" in capsys.readouterr().out
339+
logger = logging.getLogger("sqlmesh.dbt.builtin")
340+
with patch.object(logger, "warning") as mock_logger:
341+
assert context.render('{{ exceptions.warn("Warning") }}') == ""
342+
assert "Warning" in mock_logger.call_args[0][0]
332343

333344
with pytest.raises(CompilationError, match="Error"):
334345
context.render('{{ exceptions.raise_compiler_error("Error") }}')

0 commit comments

Comments
 (0)