Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,12 +62,12 @@ def read(*names, **kwargs):
],
python_requires=">=3.8",
install_requires=[
"click==8.1.7",
"dbt-artifacts-parser==0.6.0",
"ruamel.yaml==0.18.6",
"tabulate==0.9.0",
"requests==2.31.0",
"sqlglot==25.30.0",
"click~=8.1.7",
"dbt-artifacts-parser~=0.8.1",
"ruamel.yaml~=0.18.6",
"tabulate~=0.9.0",
"requests~=2.31.0",
"sqlglot~=25.30.0",
],
extras_require={
# eg:
Expand Down
4 changes: 2 additions & 2 deletions src/datapilot/core/platforms/dbt/schemas/manifest.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,8 @@ class Config:


class AltimateDependsOn(BaseModel):
nodes: Optional[List[str]]
macros: Optional[List[str]]
nodes: Optional[List[str]] = None
macros: Optional[List[str]] = None


class AltimateManifestColumnInfo(BaseModel):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ def _get_node(self, node: ManifestNode) -> AltimateManifestNode:
contract=contract,
meta=node.meta,
patch_path=node.patch_path,
access=node.access.value,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is in v1.7? Is this because of artifact parser update?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, it's because of that

)

def _get_source(self, source: SourceNode) -> AltimateManifestSourceNode:
Expand Down Expand Up @@ -177,7 +178,7 @@ def _get_macro(self, macro: MacroNode) -> AltimateManifestMacroNode:
),
description=macro.description,
meta=macro.meta,
docs=macro.docs,
docs=macro.docs.dict() if macro.docs else None,
patch_path=macro.patch_path,
arguments=[AltimateMacroArgument(**arg.dict()) for arg in macro.arguments] if macro.arguments else None,
created_at=macro.created_at,
Expand Down
137 changes: 75 additions & 62 deletions src/datapilot/core/platforms/dbt/wrappers/manifest/v11/wrapper.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ def _get_node(self, node: ManifestNode) -> AltimateManifestNode:
language,
contract,
) = ([], [], None, None, None, None, None, "", "", None)
if node.resource_type.value != SEED:
if node.resource_type != SEED:
sources = node.sources
metrics = node.metrics
depends_on_nodes = node.depends_on.nodes if node.depends_on else None
Expand All @@ -77,7 +77,7 @@ def _get_node(self, node: ManifestNode) -> AltimateManifestNode:
database=node.database,
schema_name=node.schema_,
name=node.name,
resource_type=AltimateResourceType(node.resource_type.value),
resource_type=AltimateResourceType(node.resource_type),
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is this right?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How is it mapping between the enums. Please check

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

node.resource_type is a string now. It is right. I had to do a similar change when we had upgraded to a new version of dbt-artifacts-parser in the past as well, but only for the newest manifest version. Seems like they introduced the same thing for the older manifest versions this time.

package_name=node.package_name,
path=node.path,
description=node.description,
Expand Down Expand Up @@ -116,12 +116,13 @@ def _get_node(self, node: ManifestNode) -> AltimateManifestNode:
contract=contract,
meta=node.meta,
patch_path=node.patch_path,
access=node.access.value,
)

def _get_source(self, source: SourceNode) -> AltimateManifestSourceNode:
return AltimateManifestSourceNode(
database=source.database,
resource_type=AltimateResourceType(source.resource_type.value),
resource_type=AltimateResourceType(source.resource_type),
schema_name=source.schema_,
name=source.name,
package_name=source.package_name,
Expand Down Expand Up @@ -162,7 +163,7 @@ def _get_source(self, source: SourceNode) -> AltimateManifestSourceNode:
def _get_macro(self, macro: MacroNode) -> AltimateManifestMacroNode:
return AltimateManifestMacroNode(
name=macro.name,
resource_type=AltimateResourceType(macro.resource_type.value),
resource_type=AltimateResourceType(macro.resource_type),
package_name=macro.package_name,
path=macro.path,
original_file_path=macro.original_file_path,
Expand All @@ -177,7 +178,7 @@ def _get_macro(self, macro: MacroNode) -> AltimateManifestMacroNode:
),
description=macro.description,
meta=macro.meta,
docs=macro.docs,
docs=macro.docs.dict() if macro.docs else None,
patch_path=macro.patch_path,
arguments=[AltimateMacroArgument(**arg.dict()) for arg in macro.arguments] if macro.arguments else None,
created_at=macro.created_at,
Expand All @@ -187,7 +188,7 @@ def _get_macro(self, macro: MacroNode) -> AltimateManifestMacroNode:
def _get_exposure(self, exposure: ExposureNode) -> AltimateManifestExposureNode:
return AltimateManifestExposureNode(
name=exposure.name,
resource_type=AltimateResourceType(exposure.resource_type.value),
resource_type=AltimateResourceType(exposure.resource_type),
package_name=exposure.package_name,
path=exposure.path,
original_file_path=exposure.original_file_path,
Expand All @@ -203,12 +204,14 @@ def _get_exposure(self, exposure: ExposureNode) -> AltimateManifestExposureNode:
config=AltimateSourceConfig(**exposure.config.dict()) if exposure.config else None,
unrendered_config=exposure.unrendered_config,
url=exposure.url,
depends_on=AltimateDependsOn(
nodes=exposure.depends_on.nodes,
macros=exposure.depends_on.macros,
)
if exposure.depends_on
else None,
depends_on=(
AltimateDependsOn(
nodes=exposure.depends_on.nodes,
macros=exposure.depends_on.macros,
)
if exposure.depends_on
else None
),
refs=[AltimateRefArgs(**ref.dict()) for ref in exposure.refs] if exposure.refs else None,
sources=exposure.sources,
metrics=exposure.metrics,
Expand All @@ -228,35 +231,39 @@ def _get_tests(self, test: TestNode) -> AltimateManifestTestNode:
test_metadata=test_metadata,
test_type=test_type,
name=test.name,
resource_type=AltimateResourceType(test.resource_type.value),
resource_type=AltimateResourceType(test.resource_type),
package_name=test.package_name,
path=test.path,
original_file_path=test.original_file_path,
unique_id=test.unique_id,
fqn=test.fqn,
alias=test.alias,
checksum=AltimateFileHash(
name=test.checksum.name,
checksum=test.checksum.checksum,
)
if test.checksum
else None,
checksum=(
AltimateFileHash(
name=test.checksum.name,
checksum=test.checksum.checksum,
)
if test.checksum
else None
),
config=AltimateTestConfig(**test.config.dict()) if test.config else None,
description=test.description,
tags=test.tags,
columns={
name: AltimateManifestColumnInfo(
name=column.name,
description=column.description,
meta=column.meta,
data_type=column.data_type,
quote=column.quote,
tags=column.tags,
)
for name, column in test.columns.items()
}
if test.columns
else None,
columns=(
{
name: AltimateManifestColumnInfo(
name=column.name,
description=column.description,
meta=column.meta,
data_type=column.data_type,
quote=column.quote,
tags=column.tags,
)
for name, column in test.columns.items()
}
if test.columns
else None
),
meta=test.meta,
relation_name=test.relation_name,
group=test.group,
Expand All @@ -265,12 +272,14 @@ def _get_tests(self, test: TestNode) -> AltimateManifestTestNode:
refs=[AltimateRefArgs(**ref.dict()) for ref in test.refs] if test.refs else None,
sources=test.sources,
metrics=test.metrics,
depends_on=AltimateDependsOn(
nodes=test.depends_on.nodes,
macros=test.depends_on.macros,
)
if test.depends_on
else None,
depends_on=(
AltimateDependsOn(
nodes=test.depends_on.nodes,
macros=test.depends_on.macros,
)
if test.depends_on
else None
),
compiled_path=test.compiled_path,
compiled=test.compiled,
compiled_code=test.compiled_code,
Expand All @@ -281,35 +290,39 @@ def _get_seed(self, seed: SeedNodeMap) -> AltimateSeedNode:
database=seed.database,
schema_name=seed.schema_,
name=seed.name,
resource_type=AltimateResourceType(seed.resource_type.value),
resource_type=AltimateResourceType(seed.resource_type),
package_name=seed.package_name,
path=seed.path,
original_file_path=seed.original_file_path,
unique_id=seed.unique_id,
fqn=seed.fqn,
alias=seed.alias,
checksum=AltimateFileHash(
name=seed.checksum.name,
checksum=seed.checksum.checksum,
)
if seed.checksum
else None,
checksum=(
AltimateFileHash(
name=seed.checksum.name,
checksum=seed.checksum.checksum,
)
if seed.checksum
else None
),
config=AltimateSeedConfig(**seed.config.dict()) if seed.config else None,
description=seed.description,
tags=seed.tags,
columns={
name: AltimateManifestColumnInfo(
name=column.name,
description=column.description,
meta=column.meta,
data_type=column.data_type,
quote=column.quote,
tags=column.tags,
)
for name, column in seed.columns.items()
}
if seed.columns
else None,
columns=(
{
name: AltimateManifestColumnInfo(
name=column.name,
description=column.description,
meta=column.meta,
data_type=column.data_type,
quote=column.quote,
tags=column.tags,
)
for name, column in seed.columns.items()
}
if seed.columns
else None
),
meta=seed.meta,
group=seed.group,
docs=seed.docs.dict() if seed.docs else None,
Expand All @@ -327,7 +340,7 @@ def get_nodes(
nodes = {}
for node in self.manifest.nodes.values():
if (
node.resource_type.value
node.resource_type
in [
AltimateResourceType.seed.value,
AltimateResourceType.test.value,
Expand All @@ -350,7 +363,7 @@ def get_sources(self) -> Dict[str, AltimateManifestSourceNode]:
def get_macros(self) -> Dict[str, AltimateManifestMacroNode]:
macros = {}
for macro in self.manifest.macros.values():
if macro.resource_type.value == AltimateResourceType.macro.value and macro.package_name == self.get_package():
if macro.resource_type == AltimateResourceType.macro.value and macro.package_name == self.get_package():
macros[macro.unique_id] = self._get_macro(macro)
return macros

Expand All @@ -371,15 +384,15 @@ def get_tests(self, type=None) -> Dict[str, AltimateManifestTestNode]:

for node in self.manifest.nodes.values():
# Check if the node is a test and of the correct type
if node.resource_type.value == AltimateResourceType.test.value:
if node.resource_type == AltimateResourceType.test.value:
if any(isinstance(node, t) for t in types):
tests[node.unique_id] = self._get_tests(node)
return tests

def get_seeds(self) -> Dict[str, AltimateSeedNode]:
seeds = {}
for seed in self.manifest.nodes.values():
if seed.resource_type.value == AltimateResourceType.seed.value:
if seed.resource_type == AltimateResourceType.seed.value:
seeds[seed.unique_id] = self._get_seed(seed)
return seeds

Expand Down
26 changes: 13 additions & 13 deletions src/datapilot/core/platforms/dbt/wrappers/manifest/v12/schemas.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,33 +4,33 @@

from dbt_artifacts_parser.parsers.manifest.manifest_v12 import Exposures
from dbt_artifacts_parser.parsers.manifest.manifest_v12 import Macros
from dbt_artifacts_parser.parsers.manifest.manifest_v12 import Node
from dbt_artifacts_parser.parsers.manifest.manifest_v12 import Node1
from dbt_artifacts_parser.parsers.manifest.manifest_v12 import Node2
from dbt_artifacts_parser.parsers.manifest.manifest_v12 import Node3
from dbt_artifacts_parser.parsers.manifest.manifest_v12 import Node4
from dbt_artifacts_parser.parsers.manifest.manifest_v12 import Node5
from dbt_artifacts_parser.parsers.manifest.manifest_v12 import Node6
from dbt_artifacts_parser.parsers.manifest.manifest_v12 import Node7
from dbt_artifacts_parser.parsers.manifest.manifest_v12 import Nodes
from dbt_artifacts_parser.parsers.manifest.manifest_v12 import Nodes1
from dbt_artifacts_parser.parsers.manifest.manifest_v12 import Nodes2
from dbt_artifacts_parser.parsers.manifest.manifest_v12 import Nodes3
from dbt_artifacts_parser.parsers.manifest.manifest_v12 import Nodes4
from dbt_artifacts_parser.parsers.manifest.manifest_v12 import Nodes5
from dbt_artifacts_parser.parsers.manifest.manifest_v12 import Nodes6
from dbt_artifacts_parser.parsers.manifest.manifest_v12 import Nodes7
from dbt_artifacts_parser.parsers.manifest.manifest_v12 import Sources

from datapilot.core.platforms.dbt.constants import GENERIC
from datapilot.core.platforms.dbt.constants import SINGULAR

ManifestNode = Union[Node, Node1, Node2, Node3, Node4, Node5, Node6, Node7]
ManifestNode = Union[Nodes, Nodes1, Nodes2, Nodes3, Nodes4, Nodes5, Nodes6, Nodes7]

SourceNode = Sources

ExposureNode = Exposures

TestNode = Union[Node6, Node2]
TestNode = Union[Nodes6, Nodes2]

MacroNode = Macros

TEST_TYPE_TO_NODE_MAP: Dict[str, Type] = {
GENERIC: [Node6],
SINGULAR: [Node2],
GENERIC: [Nodes6],
SINGULAR: [Nodes2],
}


SeedNodeMap = Node
SeedNodeMap = Nodes
Loading
Loading