Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
Prev Previous commit
Update checked_agg_time_dimension_for_measure to only require a `Me…
…asureReference`

Previously we were taking in a fully realized `Measure` object as a parameter
to `checked_agg_time_dimension_for_measure`.  By switching to taking in only
a `MeasureReference` the function now guarantees that the referenced `Measure`
belongs to the `SemanticModel`. This has the unfortunate side affect of preforming
an additional list based lookup, but if this ever becomes an issue, we'll know
what we can do.
  • Loading branch information
QMalcolm committed Jul 12, 2023
commit 315c4e20d70ae5945836dfb479cb2ea37e38bf78
4 changes: 2 additions & 2 deletions dbt_semantic_interfaces/implementations/semantic_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
from dbt_semantic_interfaces.implementations.elements.measure import PydanticMeasure
from dbt_semantic_interfaces.implementations.metadata import PydanticMetadata
from dbt_semantic_interfaces.protocols import (
Measure,
ProtocolHint,
SemanticModel,
SemanticModelDefaults,
Expand Down Expand Up @@ -170,7 +169,8 @@ def get_entity(self, entity_reference: LinkableElementReference) -> PydanticEnti

raise ValueError(f"No entity with name ({entity_reference}) in semantic_model with name ({self.name})")

def checked_agg_time_dimension_for_measure(self, measure: Measure): # noqa: D
def checked_agg_time_dimension_for_measure(self, measure_reference: MeasureReference): # noqa: D
measure = self.get_measure(measure_reference=measure_reference)
if self.defaults is not None:
default_agg_time_dimesion = self.defaults.agg_time_dimension

Expand Down
2 changes: 1 addition & 1 deletion dbt_semantic_interfaces/protocols/semantic_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ def metadata(self) -> Optional[Metadata]: # noqa: D
pass

@abstractmethod
def checked_agg_time_dimension_for_measure(self, measure: Measure) -> TimeDimensionReference:
def checked_agg_time_dimension_for_measure(self, measure_reference: MeasureReference) -> TimeDimensionReference:
"""Returns the `TimeDimensionReference` what a measure should use for it's `agg_time_dimension`.

Should raise an exception if a TimeDimensionReference cannot be built
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ def _validate_semantic_model(semantic_model: SemanticModel) -> List[ValidationIs
),
element_type=SemanticModelElementType.MEASURE,
)
agg_time_dimension_reference = semantic_model.checked_agg_time_dimension_for_measure(measure)
agg_time_dimension_reference = semantic_model.checked_agg_time_dimension_for_measure(measure.reference)
if not SemanticModelValidationHelpers.time_dimension_in_model(
time_dimension_name=agg_time_dimension_reference.element_name, semantic_model=semantic_model
):
Expand Down
2 changes: 1 addition & 1 deletion dbt_semantic_interfaces/validations/measures.py
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,7 @@ def validate_manifest(semantic_manifest: SemanticManifestT) -> Sequence[Validati
non_additive_dimension = measure.non_additive_dimension
if non_additive_dimension is None:
continue
agg_time_dimension_reference = semantic_model.checked_agg_time_dimension_for_measure(measure)
agg_time_dimension_reference = semantic_model.checked_agg_time_dimension_for_measure(measure.reference)
agg_time_dimension = next(
(dim for dim in semantic_model.dimensions if agg_time_dimension_reference.element_name == dim.name),
None,
Expand Down