Skip to content

Commit 492a2da

Browse files
authored
feat: add dbt 1.9 support (#46)
1 parent 6df1d86 commit 492a2da

File tree

13 files changed

+278
-222
lines changed

13 files changed

+278
-222
lines changed

setup.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,12 @@ def read(*names, **kwargs):
6262
],
6363
python_requires=">=3.8",
6464
install_requires=[
65-
"click==8.1.7",
66-
"dbt-artifacts-parser==0.6.0",
67-
"ruamel.yaml==0.18.6",
68-
"tabulate==0.9.0",
69-
"requests==2.31.0",
70-
"sqlglot==25.30.0",
65+
"click~=8.1.7",
66+
"dbt-artifacts-parser~=0.8.1",
67+
"ruamel.yaml~=0.18.6",
68+
"tabulate~=0.9.0",
69+
"requests~=2.31.0",
70+
"sqlglot~=25.30.0",
7171
],
7272
extras_require={
7373
# eg:

src/datapilot/constants.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from enum import Enum
2+
3+
4+
class Extra(str, Enum):
5+
allow = "allow"
6+
forbid = "forbid"
7+
ignore = "ignore"

src/datapilot/core/platforms/dbt/insights/checks/check_model_has_labels_keys.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ def _build_failure_result(self, model_unique_id: str, missing_keys: Sequence[str
7676
def _check_labels_keys(self, node_id) -> Tuple[int, Set[str]]:
7777
status_code = 0
7878
missing_keys = set(self.labels_keys) - set(self.get_node(node_id).label)
79-
config = self.get_node(node_id).config.dict() if self.get_node(node_id).config else {}
79+
config = self.get_node(node_id).config.model_dump() if self.get_node(node_id).config else {}
8080
labels = config.get("labels", {})
8181
label_keys = set(labels.keys())
8282
extra_keys = set()

src/datapilot/core/platforms/dbt/insights/checks/check_model_has_meta_keys.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ def _build_failure_result(self, model_unique_id: str, missing_keys: Sequence[str
7272
def _check_meta_keys(self, node_id) -> Tuple[int, Set[str], Set[str]]:
7373
status_code = 0
7474
model = self.get_node(node_id)
75-
meta = model.meta.dict() if model.meta else {}
75+
meta = model.meta if model.meta else {}
7676
model_meta_keys = set(meta.keys())
7777
missing_keys = None
7878
extra_keys = None

src/datapilot/core/platforms/dbt/insights/checks/check_source_has_freshness.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ def generate(self, *args, **kwargs) -> List[DBTModelInsightResponse]:
6161

6262
def _check_source_has_freshness(self, source_id: str) -> List[str]:
6363
source = self.get_node(source_id)
64-
freshness = source.freshness.dict() if source.freshness else {}
64+
freshness = source.freshness.model_dump() if source.freshness else {}
6565

6666
if not freshness:
6767
return False

src/datapilot/core/platforms/dbt/insights/checks/check_source_has_labels_keys.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ def _build_failure_result(self, model_unique_id: str, missing_keys: Sequence[str
7474
def _check_labels_keys(self, node_id) -> Tuple[int, Set[str]]:
7575
status_code = 0
7676
missing_keys = set(self.labels_keys) - set(self.get_node(node_id).label)
77-
config = self.get_node(node_id).config.dict() if self.get_node(node_id).config else {}
77+
config = self.get_node(node_id).config.model_dump() if self.get_node(node_id).config else {}
7878
labels = config.get("labels", {})
7979
label_keys = set(labels.keys())
8080
extra_keys = set()

src/datapilot/core/platforms/dbt/insights/checks/check_source_has_meta_keys.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ def generate(self, *args, **kwargs) -> List[DBTModelInsightResponse]:
8181
def _check_source_has_meta_keys(self, source_unique_id: str):
8282
status_code = 0
8383
model = self.get_node(source_unique_id)
84-
meta = model.meta.dict() if model.meta else {}
84+
meta = model.meta if model.meta else {}
8585
model_meta_keys = set(meta.keys())
8686
missing_keys = None
8787
extra_keys = None

src/datapilot/core/platforms/dbt/schemas/catalog.py

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,16 @@
55
from typing import Optional
66
from typing import Union
77

8-
from pydantic.config import Extra
8+
from pydantic import ConfigDict
99
from pydantic.main import BaseModel
1010

11+
from datapilot.constants import Extra
12+
1113

1214
class AltimateCatalogMetadata(BaseModel):
13-
class Config:
14-
extra = Extra.forbid
15+
model_config = ConfigDict(
16+
extra=Extra.forbid,
17+
)
1518

1619
dbt_schema_version: Optional[str] = "https://schemas.getdbt.com/dbt/catalog/v1.json"
1720
dbt_version: Optional[str] = "0.19.0"
@@ -21,8 +24,9 @@ class Config:
2124

2225

2326
class AltimateCatalogTableMetadata(BaseModel):
24-
class Config:
25-
extra = Extra.forbid
27+
model_config = ConfigDict(
28+
extra=Extra.forbid,
29+
)
2630

2731
type: str
2832
database: Optional[Optional[str]] = None
@@ -33,8 +37,9 @@ class Config:
3337

3438

3539
class AltimateCatalogColumnMetadata(BaseModel):
36-
class Config:
37-
extra = Extra.forbid
40+
model_config = ConfigDict(
41+
extra=Extra.forbid,
42+
)
3843

3944
type: str
4045
comment: Optional[Optional[str]] = None
@@ -43,8 +48,9 @@ class Config:
4348

4449

4550
class AltimateCatalogStatsItem(BaseModel):
46-
class Config:
47-
extra = Extra.forbid
51+
model_config = ConfigDict(
52+
extra=Extra.forbid,
53+
)
4854

4955
id: str
5056
label: str
@@ -54,8 +60,9 @@ class Config:
5460

5561

5662
class AltimateCatalogTable(BaseModel):
57-
class Config:
58-
extra = Extra.forbid
63+
model_config = ConfigDict(
64+
extra=Extra.forbid,
65+
)
5966

6067
metadata: AltimateCatalogTableMetadata
6168
columns: Dict[str, AltimateCatalogColumnMetadata]
@@ -64,8 +71,9 @@ class Config:
6471

6572

6673
class AltimateCatalogCatalogV1(BaseModel):
67-
class Config:
68-
extra = Extra.forbid
74+
model_config = ConfigDict(
75+
extra=Extra.forbid,
76+
)
6977

7078
metadata: AltimateCatalogMetadata
7179
nodes: Dict[str, AltimateCatalogTable]

src/datapilot/core/platforms/dbt/schemas/manifest.py

Lines changed: 41 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919
from dbt_artifacts_parser.parsers.manifest.manifest_v11 import ManifestV11
2020
from dbt_artifacts_parser.parsers.manifest.manifest_v11 import SupportedLanguage
2121
from pydantic import BaseModel
22-
from pydantic import Extra
22+
from pydantic import ConfigDict
23+
24+
from datapilot.constants import Extra
2325

2426

2527
class DBTVersion(BaseModel):
@@ -46,16 +48,17 @@ class DBTVersion(BaseModel):
4648

4749

4850
class AltimateDocs(BaseModel):
49-
class Config:
50-
extra = Extra.forbid
51+
model_config = ConfigDict(
52+
extra=Extra.forbid,
53+
)
5154

5255
show: Optional[bool] = True
5356
node_color: Optional[Optional[str]] = None
5457

5558

5659
class AltimateDependsOn(BaseModel):
57-
nodes: Optional[List[str]]
58-
macros: Optional[List[str]]
60+
nodes: Optional[List[str]] = None
61+
macros: Optional[List[str]] = None
5962

6063

6164
class AltimateManifestColumnInfo(BaseModel):
@@ -98,17 +101,19 @@ class AltimateAccess(Enum):
98101

99102

100103
class AltimateDBTContract(BaseModel):
101-
class Config:
102-
extra = Extra.forbid
104+
model_config = ConfigDict(
105+
extra=Extra.forbid,
106+
)
103107

104108
enforced: Optional[bool] = False
105109
alias_types: Optional[bool] = True
106110
checksum: Optional[Optional[str]] = None
107111

108112

109113
class AltimateHook(BaseModel):
110-
class Config:
111-
extra = Extra.forbid
114+
model_config = ConfigDict(
115+
extra=Extra.forbid,
116+
)
112117

113118
sql: str
114119
transaction: Optional[bool] = True
@@ -117,8 +122,9 @@ class Config:
117122

118123
# TODO: Need to add the rest of the fields
119124
class AltimateNodeConfig(BaseModel):
120-
class Config:
121-
extra = Extra.allow
125+
model_config = ConfigDict(
126+
extra=Extra.allow,
127+
)
122128

123129
_extra: Optional[Dict[str, Any]] = None
124130
enabled: Optional[bool] = True
@@ -203,8 +209,9 @@ class AltimateSourceConfig(BaseModel):
203209

204210

205211
class AltimateDeferRelation(BaseModel):
206-
class Config:
207-
extra = Extra.forbid
212+
model_config = ConfigDict(
213+
extra=Extra.forbid,
214+
)
208215

209216
database: Optional[str]
210217
schema_name: str
@@ -213,8 +220,9 @@ class Config:
213220

214221

215222
class AltimateSeedConfig(BaseModel):
216-
class Config:
217-
extra = Extra.allow
223+
model_config = ConfigDict(
224+
extra=Extra.allow,
225+
)
218226

219227
_extra: Optional[Dict[str, Any]] = None
220228
enabled: Optional[bool] = True
@@ -314,8 +322,9 @@ class AltimateExposureType(Enum):
314322

315323

316324
class AltimateOwner(BaseModel):
317-
class Config:
318-
extra = Extra.allow
325+
model_config = ConfigDict(
326+
extra=Extra.allow,
327+
)
319328

320329
_extra: Optional[Dict[str, Any]] = None
321330
email: Optional[Optional[str]] = None
@@ -329,17 +338,19 @@ class AltimateMaturityEnum(Enum):
329338

330339

331340
class AltimateRefArgs(BaseModel):
332-
class Config:
333-
extra = Extra.forbid
341+
model_config = ConfigDict(
342+
extra=Extra.forbid,
343+
)
334344

335345
name: str
336346
package: Optional[Optional[str]] = None
337347
version: Optional[Optional[Union[str, float]]] = None
338348

339349

340350
class AltimateExposureConfig(BaseModel):
341-
class Config:
342-
extra = Extra.allow
351+
model_config = ConfigDict(
352+
extra=Extra.allow,
353+
)
343354

344355
_extra: Optional[Dict[str, Any]] = None
345356
enabled: Optional[bool] = True
@@ -371,17 +382,19 @@ class AltimateManifestExposureNode(BaseModel):
371382

372383

373384
class AltimateTestMetadata(BaseModel):
374-
class Config:
375-
extra = Extra.forbid
385+
model_config = ConfigDict(
386+
extra=Extra.forbid,
387+
)
376388

377389
name: str
378390
kwargs: Optional[Dict[str, Any]] = None
379391
namespace: Optional[Optional[str]] = None
380392

381393

382394
class AltimateTestConfig(BaseModel):
383-
class Config:
384-
extra = Extra.allow
395+
model_config = ConfigDict(
396+
extra=Extra.allow,
397+
)
385398

386399
_extra: Optional[Dict[str, Any]] = None
387400
enabled: Optional[bool] = True
@@ -433,8 +446,9 @@ class AltimateManifestTestNode(BaseModel):
433446

434447

435448
class AltimateMacroArgument(BaseModel):
436-
class Config:
437-
extra = Extra.forbid
449+
model_config = ConfigDict(
450+
extra=Extra.forbid,
451+
)
438452

439453
name: str
440454
type: Optional[Optional[str]] = None

0 commit comments

Comments
 (0)