Skip to content

Commit 40fb9b6

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

File tree

2 files changed

+40
-6
lines changed

2 files changed

+40
-6
lines changed

sqlmesh/dbt/builtin.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from ruamel.yaml import YAMLError
1515
from sqlglot import Dialect
1616

17+
from sqlmesh.core.console import get_console
1718
from sqlmesh.core.engine_adapter import EngineAdapter
1819
from sqlmesh.core.snapshot.definition import DeployabilityIndex
1920
from sqlmesh.dbt.adapter import BaseAdapter, ParsetimeAdapter, RuntimeAdapter
@@ -170,7 +171,13 @@ def env_var(name: str, default: t.Optional[str] = None) -> t.Optional[str]:
170171

171172

172173
def log(msg: str, info: bool = False) -> str:
173-
logger.debug(msg)
174+
if info:
175+
# Write to both log file and stdout
176+
logger.info(msg)
177+
get_console().log_status_update(msg)
178+
else:
179+
logger.debug(msg)
180+
174181
return ""
175182

176183

tests/dbt/test_transformation.py

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -854,13 +854,40 @@ def test_logging(sushi_test_project: Project, runtime_renderer: t.Callable):
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:
858-
assert renderer('{{ log("foo") }}') == ""
859-
assert "foo" in mock_logger.call_args[0][0]
860857

861-
with patch.object(logger, "debug") as mock_logger:
858+
# Test log with info=False (default), should only log to file with debug and not to console
859+
with (
860+
patch.object(logger, "debug") as mock_debug,
861+
patch.object(logger, "info") as mock_info,
862+
patch.object(get_console(), "log_status_update") as mock_console,
863+
):
864+
assert renderer('{{ log("foo") }}') == ""
865+
mock_debug.assert_called_once()
866+
assert "foo" in mock_debug.call_args[0][0]
867+
mock_info.assert_not_called()
868+
mock_console.assert_not_called()
869+
870+
# Test log with info=True, should log to info and also call log_status_update
871+
with (
872+
patch.object(logger, "debug") as mock_debug,
873+
patch.object(logger, "info") as mock_info,
874+
patch.object(get_console(), "log_status_update") as mock_console,
875+
):
876+
assert renderer('{{ log("output to be logged with info", info=true) }}') == ""
877+
mock_info.assert_called_once()
878+
assert "output to be logged with info" in mock_info.call_args[0][0]
879+
mock_debug.assert_not_called()
880+
mock_console.assert_called_once()
881+
assert "output to be logged with info" in mock_console.call_args[0][0]
882+
883+
# Test print function as well, should use debug
884+
with (
885+
patch.object(logger, "debug") as mock_logger,
886+
patch.object(get_console(), "log_status_update") as mock_console,
887+
):
862888
assert renderer('{{ print("bar") }}') == ""
863-
assert "bar" in mock_logger.call_args[0][0]
889+
assert "bar" in mock_logger.call_args[0][0]
890+
mock_console.assert_not_called()
864891

865892

866893
@pytest.mark.xdist_group("dbt_manifest")

0 commit comments

Comments
 (0)