Skip to content

Commit bf10ab9

Browse files
Fix(dbt): Use the info to control logging for dbt log builtin
1 parent 0c2ba86 commit bf10ab9

File tree

2 files changed

+27
-4
lines changed

2 files changed

+27
-4
lines changed

sqlmesh/dbt/builtin.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,13 @@ def env_var(name: str, default: t.Optional[str] = None) -> t.Optional[str]:
170170

171171

172172
def log(msg: str, info: bool = False) -> str:
173-
logger.debug(msg)
173+
if info:
174+
# Write to both log file and stdout
175+
logger.info(msg)
176+
print(msg)
177+
else:
178+
logger.debug(msg)
179+
174180
return ""
175181

176182

tests/dbt/test_transformation.py

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -847,16 +847,33 @@ def test_run_query(sushi_test_project: Project, runtime_renderer: t.Callable):
847847

848848

849849
@pytest.mark.xdist_group("dbt_manifest")
850-
def test_logging(sushi_test_project: Project, runtime_renderer: t.Callable):
850+
def test_logging(sushi_test_project: Project, runtime_renderer: t.Callable, capsys):
851851
context = sushi_test_project.context
852852
assert context.target
853853
engine_adapter = context.target.to_sqlmesh().create_engine_adapter()
854854
renderer = runtime_renderer(context, engine_adapter=engine_adapter)
855855

856856
logger = logging.getLogger("sqlmesh.dbt.builtin")
857-
with patch.object(logger, "debug") as mock_logger:
857+
858+
# Test log with info=False (default) which should only log with debug
859+
with patch.object(logger, "debug") as mock_debug, patch.object(logger, "info") as mock_info:
858860
assert renderer('{{ log("foo") }}') == ""
859-
assert "foo" in mock_logger.call_args[0][0]
861+
mock_debug.assert_called_once()
862+
assert "foo" in mock_debug.call_args[0][0]
863+
mock_info.assert_not_called()
864+
865+
captured = capsys.readouterr()
866+
assert "foo" not in captured.out
867+
868+
# Test log with info=True, now should log with info and also print to stdout
869+
with patch.object(logger, "debug") as mock_debug, patch.object(logger, "info") as mock_info:
870+
assert renderer('{{ log("output to be logged with info", info=true) }}') == ""
871+
mock_info.assert_called_once()
872+
assert "output to be logged with info" in mock_info.call_args[0][0]
873+
mock_debug.assert_not_called()
874+
875+
captured = capsys.readouterr()
876+
assert "output to be logged with info" in captured.out
860877

861878
with patch.object(logger, "debug") as mock_logger:
862879
assert renderer('{{ print("bar") }}') == ""

0 commit comments

Comments
 (0)