Skip to content

Commit d4844c0

Browse files
jontsaiclaude
andcommitted
Upgrade to Pydantic v2 and bump version to 0.1.0
This commit completes the migration from Pydantic v1 to v2, with the following changes: - Updated Pydantic model configuration syntax: - Changed `class Config:` to `model_config = ConfigDict()` in catalog.py - Updated imports to use `from pydantic import ConfigDict` - Fixed Pydantic v2 field requirements: - Added default values (= None) to all Optional fields without defaults in manifest.py - This is required in Pydantic v2 for proper model validation - Updated deprecated method calls: - Changed `.json()` to `.model_dump_json()` in executor.py - These methods serialize Pydantic models to JSON strings - Added .venv/ to .gitignore - Bumped version from 0.0.26 to 0.1.0 to reflect breaking changes Note: Vendored manifest_v*.py files in src/vendor/dbt_artifacts_parser/ remain unchanged as they are historical archives. Testing: - Ran full test suite using .venv/bin/pytest - All 64 tests passed successfully - Verified Pydantic 2.12.0 compatibility BREAKING CHANGE: This upgrade requires downstream users to also upgrade to Pydantic v2. setup.py now specifies pydantic>=2.0,<3.0. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
1 parent aa5d3df commit d4844c0

File tree

6 files changed

+25
-25
lines changed

6 files changed

+25
-25
lines changed

.github/meta/.keep

Whitespace-only changes.

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ pyvenv*/
3333
sdist
3434
var
3535
venv*/
36+
.venv/
3637
wheelhouse
3738

3839
# Installer logs
@@ -62,6 +63,7 @@ nosetests.xml
6263
.project
6364
.pydevproject
6465
.vscode
66+
.github/meta/
6567

6668
# Complexity
6769
output/*.html

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ def read(*names, **kwargs):
1313

1414
setup(
1515
name="altimate-datapilot-cli",
16-
version="0.0.26",
16+
version="0.1.0",
1717
license="MIT",
1818
description="Assistant for Data Teams",
1919
long_description="{}\n{}".format(

src/datapilot/core/platforms/dbt/executor.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,8 @@ def run_llm_checks(self):
109109
self.token,
110110
self.instance_name,
111111
self.backend_url,
112-
self.manifest.json() if self.manifest else "",
113-
self.catalog.json() if self.catalog else "",
112+
self.manifest.model_dump_json() if self.manifest else "",
113+
self.catalog.model_dump_json() if self.catalog else "",
114114
check_names,
115115
)
116116
return llm_check_results

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

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
from typing import Optional
66
from typing import Union
77

8-
from pydantic.main import BaseModel
8+
from pydantic import BaseModel
9+
from pydantic import ConfigDict
910

1011
from vendor.dbt_artifacts_parser.parsers.catalog.catalog_v1 import CatalogV1 as BaseCatalogV1
1112
from vendor.dbt_artifacts_parser.parsers.catalog.catalog_v1 import Metadata as BaseMetadata
@@ -59,15 +60,12 @@ class AltimateCatalogCatalogV1(BaseModel):
5960

6061
# Custom classes to handle extra fields in newer dbt versions
6162
class Metadata(BaseMetadata):
62-
class Config:
63-
extra = "allow" # Allow extra fields in metadata
63+
model_config = ConfigDict(extra="allow")
6464

6565

6666
class CatalogV1(BaseCatalogV1):
6767
metadata: Metadata # Use our custom metadata class
68-
69-
class Config:
70-
extra = "allow" # Allow extra fields
68+
model_config = ConfigDict(extra="allow")
7169

7270

7371
Catalog = CatalogV1

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

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
class DBTVersion(BaseModel):
2626
MAJOR: int
2727
MINOR: int
28-
PATCH: Optional[int]
28+
PATCH: Optional[int] = None
2929

3030

3131
Manifest = Union[
@@ -64,8 +64,8 @@ class AltimateManifestColumnInfo(BaseModel):
6464

6565

6666
class AltimateFileHash(BaseModel):
67-
name: Optional[str]
68-
checksum: Optional[str]
67+
name: Optional[str] = None
68+
checksum: Optional[str] = None
6969

7070

7171
class AltimateResourceType(Enum):
@@ -118,8 +118,8 @@ class AltimateNodeConfig(BaseModel):
118118
materialized: Optional[str] = "view"
119119
incremental_strategy: Optional[Optional[str]] = None
120120
persist_docs: Optional[Dict[str, Any]] = None
121-
post_hook: Optional[List[AltimateHook]]
122-
pre_hook: Optional[List[AltimateHook]]
121+
post_hook: Optional[List[AltimateHook]] = None
122+
pre_hook: Optional[List[AltimateHook]] = None
123123
quoting: Optional[Dict[str, Any]] = None
124124
column_types: Optional[Dict[str, Any]] = None
125125
full_refresh: Optional[Optional[bool]] = None
@@ -128,7 +128,7 @@ class AltimateNodeConfig(BaseModel):
128128

129129

130130
class AltimateManifestNode(BaseModel):
131-
database: Optional[str]
131+
database: Optional[str] = None
132132
resource_type: AltimateResourceType
133133
schema_name: str
134134
name: str
@@ -141,7 +141,7 @@ class AltimateManifestNode(BaseModel):
141141
config: Optional[AltimateNodeConfig] = None
142142
raw_code: Optional[str] = ""
143143
language: Optional[str] = "sql"
144-
checksum: Optional[AltimateFileHash]
144+
checksum: Optional[AltimateFileHash] = None
145145
description: Optional[str] = ""
146146
columns: Optional[Dict[str, AltimateManifestColumnInfo]] = None
147147
relation_name: Optional[Optional[str]] = None
@@ -151,7 +151,7 @@ class AltimateManifestNode(BaseModel):
151151
compiled_path: Optional[Optional[str]] = None
152152
compiled: Optional[bool] = False
153153
compiled_code: Optional[Optional[str]] = None
154-
access: Optional[AltimateAccess]
154+
access: Optional[AltimateAccess] = None
155155
contract: Optional[AltimateDBTContract] = None
156156
meta: Optional[Dict[str, Any]] = None
157157
patch_path: Optional[Optional[str]] = None
@@ -190,10 +190,10 @@ class AltimateSourceConfig(BaseModel):
190190

191191

192192
class AltimateDeferRelation(BaseModel):
193-
database: Optional[str]
193+
database: Optional[str] = None
194194
schema_name: str
195195
alias: str
196-
relation_name: Optional[str]
196+
relation_name: Optional[str] = None
197197

198198

199199
class AltimateSeedConfig(BaseModel):
@@ -208,8 +208,8 @@ class AltimateSeedConfig(BaseModel):
208208
materialized: Optional[str] = "seed"
209209
incremental_strategy: Optional[Optional[str]] = None
210210
persist_docs: Optional[Dict[str, Any]] = None
211-
post_hook: Optional[List[AltimateHook]]
212-
pre_hook: Optional[List[AltimateHook]]
211+
post_hook: Optional[List[AltimateHook]] = None
212+
pre_hook: Optional[List[AltimateHook]] = None
213213
quoting: Optional[Dict[str, Any]] = None
214214
column_types: Optional[Dict[str, Any]] = None
215215
full_refresh: Optional[Optional[bool]] = None
@@ -225,7 +225,7 @@ class AltimateSeedConfig(BaseModel):
225225

226226

227227
class AltimateSeedNode(BaseModel):
228-
database: Optional[str]
228+
database: Optional[str] = None
229229
schema_name: str
230230
name: str
231231
resource_type: AltimateResourceType
@@ -235,7 +235,7 @@ class AltimateSeedNode(BaseModel):
235235
unique_id: str
236236
fqn: List[str]
237237
alias: str
238-
checksum: Optional[AltimateFileHash]
238+
checksum: Optional[AltimateFileHash] = None
239239
config: Optional[AltimateSeedConfig] = None
240240
tags: Optional[List[str]] = None
241241
description: Optional[str] = ""
@@ -257,7 +257,7 @@ class AltimateSeedNode(BaseModel):
257257

258258

259259
class AltimateManifestSourceNode(BaseModel):
260-
database: Optional[str]
260+
database: Optional[str] = None
261261
resource_type: AltimateResourceType
262262
schema_name: str
263263
name: str
@@ -379,7 +379,7 @@ class AltimateManifestTestNode(BaseModel):
379379
unique_id: str
380380
fqn: List[str]
381381
alias: str
382-
checksum: Optional[AltimateFileHash]
382+
checksum: Optional[AltimateFileHash] = None
383383
config: Optional[AltimateTestConfig] = None
384384
_event_status: Optional[Dict[str, Any]] = None
385385
tags: Optional[List[str]] = None

0 commit comments

Comments
 (0)