Skip to content

Commit 7877b06

Browse files
authored
Fix: dbt-core 1.9.5 freshness error (#4586)
1 parent d11fcdd commit 7877b06

3 files changed

Lines changed: 38 additions & 2 deletions

File tree

sqlmesh/dbt/manifest.py

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
from dbt.config.profile import read_profile
2222
from dbt.config.renderer import DbtProjectYamlRenderer, ProfileRenderer
2323
from dbt.parser.manifest import ManifestLoader
24+
from dbt.parser.sources import merge_freshness
2425
from dbt.tracking import do_not_track
2526

2627
from sqlmesh.core import constants as c
@@ -152,9 +153,24 @@ def _load_all(self) -> None:
152153

153154
def _load_sources(self) -> None:
154155
for source in self._manifest.sources.values():
156+
# starting in dbt-core 1.9.5, freshness can be set in both source and source config
157+
source_dict = source.to_dict()
158+
source_dict.pop("freshness", None)
159+
160+
source_config_dict = _config(source)
161+
source_config_dict.pop("freshness", None)
162+
163+
source_config_freshness = getattr(source.config, "freshness", None)
164+
freshness = (
165+
merge_freshness(source.freshness, source_config_freshness)
166+
if source_config_freshness
167+
else source.freshness
168+
)
169+
155170
source_config = SourceConfig(
156-
**_config(source),
157-
**source.to_dict(),
171+
**source_config_dict,
172+
**source_dict,
173+
freshness=freshness.to_dict() if freshness else None,
158174
)
159175
self._sources_per_package[source.package_name][source_config.config_name] = (
160176
source_config

tests/dbt/test_manifest.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from sqlmesh.dbt.manifest import ManifestHelper
1010
from sqlmesh.dbt.profile import Profile
1111
from sqlmesh.dbt.builtin import Api, _relation_info_to_relation
12+
from sqlmesh.dbt.util import DBT_VERSION
1213
from sqlmesh.utils.jinja import MacroReference
1314

1415
pytestmark = pytest.mark.dbt
@@ -114,6 +115,12 @@ def test_manifest_helper(caplog):
114115
assert sources["streaming.order_items"].table_name == "order_items"
115116
assert sources["streaming.order_items"].schema_ == "raw"
116117

118+
assert sources["streaming.order_items"].freshness == {
119+
"warn_after": {"count": 10 if DBT_VERSION < (1, 9, 5) else 12, "period": "hour"},
120+
"error_after": {"count": 11 if DBT_VERSION < (1, 9, 5) else 13, "period": "hour"},
121+
"filter": None,
122+
}
123+
117124

118125
@pytest.mark.xdist_group("dbt_manifest")
119126
def test_tests_referencing_disabled_models():

tests/fixtures/dbt/sushi_test/models/schema.yml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,14 @@ models:
99
data_type: double
1010
- name: model_columns
1111
data_type: int
12+
freshness:
13+
warn_after: {count: 6, period: hour}
14+
error_after: {count: 7, period: hour}
1215
config:
1316
dialect: postgres
17+
freshness:
18+
warn_after: {count: 8, period: hour}
19+
error_after: {count: 9, period: hour}
1420
- name: waiters
1521
- name: waiter_as_customer_by_day
1622
- name: waiter_revenue_by_day
@@ -30,6 +36,13 @@ sources:
3036
- name: items
3137
- name: orders
3238
- name: order_items
39+
freshness:
40+
warn_after: {count: 10, period: hour}
41+
error_after: {count: 11, period: hour}
42+
config:
43+
freshness:
44+
warn_after: {count: 12, period: hour}
45+
error_after: {count: 13, period: hour}
3346

3447
- name: parquet_file
3548
meta:

0 commit comments

Comments
 (0)