Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add version and make compatible fix for dbt-core 1.6.0b8 #651

Merged
merged 3 commits into from
Jul 11, 2023
Merged
Show file tree
Hide file tree
Changes from all 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
6 changes: 6 additions & 0 deletions .changes/unreleased/Fixes-20230711-132046.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
kind: Fixes
body: Added --version and fix manifest transformer rules for dbt-core-=1.6.0b8
time: 2023-07-11T13:20:46.973302-04:00
custom:
Author: WilliamDee
Issue: "650"
10 changes: 2 additions & 8 deletions metricflow/cli/dbt_connectors/dbt_config_accessor.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,12 @@
from dbt.config.profile import Profile
from dbt.config.project import Project
from dbt.config.runtime import load_profile, load_project
from dbt_semantic_interfaces.implementations.semantic_manifest import PydanticSemanticManifest
from dbt_semantic_interfaces.pretty_print import pformat_big_objects
from dbt_semantic_interfaces.protocols.semantic_manifest import SemanticManifest
from dbt_semantic_interfaces.transformations.semantic_manifest_transformer import PydanticSemanticManifestTransformer
from typing_extensions import Self

from metricflow.errors.errors import ModelCreationException
from metricflow.model.dbt_manifest_parser import parse_manifest_from_dbt_generated_manifest

logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -111,11 +110,6 @@ def build_semantic_manifest_from_dbt_project_root(project_root: Path) -> Semanti
try:
with open(full_path_to_manifest, "r") as file:
raw_contents = file.read()
raw_model = PydanticSemanticManifest.parse_raw(raw_contents)
# The serialized object in the dbt project does not have all transformations applied to it at
# this time, which causes failures with input measure resolution.
# TODO: remove this transform call once the upstream changes are integrated into our dependency tree
model = PydanticSemanticManifestTransformer.transform(raw_model)
return model
return parse_manifest_from_dbt_generated_manifest(manifest_json_string=raw_contents)
except Exception as e:
raise ModelCreationException from e
1 change: 1 addition & 0 deletions metricflow/cli/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@

@click.group()
@click.option("-v", "--verbose", is_flag=True)
@click.version_option()
@error_if_not_in_dbt_project
@pass_config
@log_call(module_name=__name__, telemetry_reporter=_telemetry_reporter)
Expand Down
45 changes: 45 additions & 0 deletions metricflow/model/dbt_manifest_parser.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
from __future__ import annotations

from dbt_semantic_interfaces.implementations.semantic_manifest import (
PydanticSemanticManifest,
)
from dbt_semantic_interfaces.transformations.agg_time_dimension import (
SetMeasureAggregationTimeDimensionRule,
)
from dbt_semantic_interfaces.transformations.boolean_measure import (
BooleanMeasureAggregationRule,
)
from dbt_semantic_interfaces.transformations.convert_count import ConvertCountToSumRule
from dbt_semantic_interfaces.transformations.convert_median import (
ConvertMedianToPercentileRule,
)
from dbt_semantic_interfaces.transformations.names import LowerCaseNamesRule
from dbt_semantic_interfaces.transformations.proxy_measure import CreateProxyMeasureRule
from dbt_semantic_interfaces.transformations.semantic_manifest_transformer import (
PydanticSemanticManifestTransformer,
)


def parse_manifest_from_dbt_generated_manifest(manifest_json_string: str) -> PydanticSemanticManifest:
"""Parse a PydanticSemanticManifest given the generated semantic_manifest json from dbt."""
raw_model = PydanticSemanticManifest.parse_raw(manifest_json_string)
# The serialized object in the dbt project does not have all transformations applied to it at
# this time, which causes failures with input measure resolution.
# TODO: remove this transform call once the upstream changes are integrated into our dependency tree
rules = (
# Primary
(
LowerCaseNamesRule(),
SetMeasureAggregationTimeDimensionRule(),
),
# Secondary
(
CreateProxyMeasureRule(),
BooleanMeasureAggregationRule(),
ConvertCountToSumRule(),
ConvertMedianToPercentileRule(),
# AddInputMetricMeasuresRule(), Fixed by dbt-core=1.6.0b8
),
)
model = PydanticSemanticManifestTransformer.transform(raw_model, rules)
return model