From 7906e1a9d2053c9d48af45c2a75f8efd75744d43 Mon Sep 17 00:00:00 2001 From: Chris Rericha Date: Fri, 12 Sep 2025 17:32:52 -0400 Subject: [PATCH] Fix: dbt manifest can have null macro dependencies that translate into 'None' --- sqlmesh/dbt/manifest.py | 2 +- tests/dbt/test_manifest.py | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/sqlmesh/dbt/manifest.py b/sqlmesh/dbt/manifest.py index 15377e59dc..0e33569888 100644 --- a/sqlmesh/dbt/manifest.py +++ b/sqlmesh/dbt/manifest.py @@ -661,7 +661,7 @@ def _macro_references( return result for macro_node_id in node.depends_on.macros: - if not macro_node_id: + if not macro_node_id or macro_node_id == "None": continue macro_node = manifest.macros[macro_node_id] diff --git a/tests/dbt/test_manifest.py b/tests/dbt/test_manifest.py index e5e98eae49..e6c02bcb4c 100644 --- a/tests/dbt/test_manifest.py +++ b/tests/dbt/test_manifest.py @@ -304,3 +304,23 @@ def test_convert_jinja_test_to_macro(): {%- endmacro -%}""" assert _convert_jinja_test_to_macro(macro_input) == macro_input + + +@pytest.mark.xdist_group("dbt_manifest") +def test_macro_depenency_none_str(): + project_path = Path("tests/fixtures/dbt/sushi_test") + profile = Profile.load(DbtContext(project_path)) + helper = ManifestHelper( + project_path, + project_path, + "sushi", + profile.target, + model_defaults=ModelDefaultsConfig(start="2020-01-01"), + ) + node = helper._manifest.nodes["model.customers.customer_revenue_by_day"] + node.depends_on.macros.append("None") + + from sqlmesh.dbt.manifest import _macro_references + + # "None" macro shouldn't raise a KeyError + _macro_references(helper._manifest, node)