Skip to content

Commit 25a6061

Browse files
mdesmetclaude
andcommitted
refactor: replace Pydantic BaseModel with dataclasses
Replace Pydantic BaseModel with Python's native dataclasses across schema files to reduce dependencies and simplify codebase. This includes updating field ordering to comply with dataclass requirements (fields with defaults must come after fields without defaults). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
1 parent 94806ea commit 25a6061

File tree

4 files changed

+95
-74
lines changed

4 files changed

+95
-74
lines changed
Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1+
from dataclasses import dataclass
12
from enum import Enum
23
from typing import Dict
34

4-
from pydantic import BaseModel
5-
65

76
class Severity(Enum):
87
INFO = "INFO"
98
WARNING = "WARNING"
109
ERROR = "ERROR"
1110

1211

13-
class InsightResult(BaseModel):
12+
@dataclass
13+
class InsightResult:
1414
name: str
1515
type: str
1616
message: str
@@ -19,6 +19,7 @@ class InsightResult(BaseModel):
1919
metadata: Dict
2020

2121

22-
class InsightResponse(BaseModel):
22+
@dataclass
23+
class InsightResponse:
2324
insight: InsightResult
2425
severity: Severity = Severity.ERROR
Lines changed: 17 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,73 +1,64 @@
1+
from dataclasses import dataclass
12
from datetime import datetime
23
from typing import ClassVar
34
from typing import Dict
45
from typing import List
56
from typing import Optional
67
from typing import Union
78

8-
from pydantic.main import BaseModel
9+
from vendor.dbt_artifacts_parser.parsers.catalog.catalog_v1 import CatalogV1
910

10-
from vendor.dbt_artifacts_parser.parsers.catalog.catalog_v1 import CatalogV1 as BaseCatalogV1
11-
from vendor.dbt_artifacts_parser.parsers.catalog.catalog_v1 import Metadata as BaseMetadata
1211

13-
14-
class AltimateCatalogMetadata(BaseModel):
12+
@dataclass
13+
class AltimateCatalogMetadata:
1514
dbt_schema_version: Optional[str] = "https://schemas.getdbt.com/dbt/catalog/v1.json"
1615
dbt_version: Optional[str] = "0.19.0"
1716
generated_at: Optional[datetime] = "2021-02-10T04:42:33.680487Z"
1817
invocation_id: Optional[Optional[str]] = None
1918
env: ClassVar[Optional[Dict[str, str]]] = {}
2019

2120

22-
class AltimateCatalogTableMetadata(BaseModel):
21+
@dataclass
22+
class AltimateCatalogTableMetadata:
2323
type: str
24-
database: Optional[Optional[str]] = None
2524
schema_name: str
2625
name: str
26+
database: Optional[Optional[str]] = None
2727
comment: Optional[Optional[str]] = None
2828
owner: Optional[Optional[str]] = None
2929

3030

31-
class AltimateCatalogColumnMetadata(BaseModel):
31+
@dataclass
32+
class AltimateCatalogColumnMetadata:
3233
type: str
33-
comment: Optional[Optional[str]] = None
3434
index: int
3535
name: str
36+
comment: Optional[Optional[str]] = None
3637

3738

38-
class AltimateCatalogStatsItem(BaseModel):
39+
@dataclass
40+
class AltimateCatalogStatsItem:
3941
id: str
4042
label: str
43+
include: bool
4144
value: Optional[Optional[Union[bool, str, float]]] = None
4245
description: Optional[Optional[str]] = None
43-
include: bool
4446

4547

46-
class AltimateCatalogTable(BaseModel):
48+
@dataclass
49+
class AltimateCatalogTable:
4750
metadata: AltimateCatalogTableMetadata
4851
columns: Dict[str, AltimateCatalogColumnMetadata]
4952
stats: Dict[str, AltimateCatalogStatsItem]
5053
unique_id: Optional[Optional[str]] = None
5154

5255

53-
class AltimateCatalogCatalogV1(BaseModel):
56+
@dataclass
57+
class AltimateCatalogCatalogV1:
5458
metadata: AltimateCatalogMetadata
5559
nodes: Dict[str, AltimateCatalogTable]
5660
sources: Dict[str, AltimateCatalogTable]
5761
errors: Optional[Optional[List[str]]] = None
5862

5963

60-
# Custom classes to handle extra fields in newer dbt versions
61-
class Metadata(BaseMetadata):
62-
class Config:
63-
extra = "allow" # Allow extra fields in metadata
64-
65-
66-
class CatalogV1(BaseCatalogV1):
67-
metadata: Metadata # Use our custom metadata class
68-
69-
class Config:
70-
extra = "allow" # Allow extra fields
71-
72-
7364
Catalog = CatalogV1

0 commit comments

Comments
 (0)