Source code for pyatlan.model.assets.core.metric

# SPDX-License-Identifier: Apache-2.0
# Copyright 2025 Atlan Pte. Ltd.


from __future__ import annotations

from typing import ClassVar, List, Optional, Set

from pydantic.v1 import Field, validator

from pyatlan.model.fields.atlan_fields import KeywordField, RelationField, TextField

from .data_quality import DataQuality


[docs] class Metric(DataQuality): """Description""" type_name: str = Field(default="Metric", allow_mutation=False) @validator("type_name") def validate_type_name(cls, v): if v != "Metric": raise ValueError("must be Metric") return v def __setattr__(self, name, value): if name in Metric._convenience_properties: return object.__setattr__(self, name, value) super().__setattr__(name, value) METRIC_TYPE: ClassVar[KeywordField] = KeywordField("metricType", "metricType") """ Type of the metric. """ METRIC_SQL: ClassVar[TextField] = TextField("metricSQL", "metricSQL") """ SQL query used to compute the metric. """ METRIC_FILTERS: ClassVar[TextField] = TextField("metricFilters", "metricFilters") """ Filters to be applied to the metric query. """ METRIC_TIME_GRAINS: ClassVar[TextField] = TextField( "metricTimeGrains", "metricTimeGrains" ) """ List of time grains to be applied to the metric query. """ METRIC_TIMESTAMP_COLUMN: ClassVar[RelationField] = RelationField( "metricTimestampColumn" ) """ TBC """ ASSETS: ClassVar[RelationField] = RelationField("assets") """ TBC """ METRIC_DIMENSION_COLUMNS: ClassVar[RelationField] = RelationField( "metricDimensionColumns" ) """ TBC """ _convenience_properties: ClassVar[List[str]] = [ "metric_type", "metric_s_q_l", "metric_filters", "metric_time_grains", "metric_timestamp_column", "assets", "metric_dimension_columns", ] @property def metric_type(self) -> Optional[str]: return None if self.attributes is None else self.attributes.metric_type @metric_type.setter def metric_type(self, metric_type: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.metric_type = metric_type @property def metric_s_q_l(self) -> Optional[str]: return None if self.attributes is None else self.attributes.metric_s_q_l @metric_s_q_l.setter def metric_s_q_l(self, metric_s_q_l: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.metric_s_q_l = metric_s_q_l @property def metric_filters(self) -> Optional[str]: return None if self.attributes is None else self.attributes.metric_filters @metric_filters.setter def metric_filters(self, metric_filters: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.metric_filters = metric_filters @property def metric_time_grains(self) -> Optional[Set[str]]: return None if self.attributes is None else self.attributes.metric_time_grains @metric_time_grains.setter def metric_time_grains(self, metric_time_grains: Optional[Set[str]]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.metric_time_grains = metric_time_grains @property def metric_timestamp_column(self) -> Optional[Column]: return ( None if self.attributes is None else self.attributes.metric_timestamp_column ) @metric_timestamp_column.setter def metric_timestamp_column(self, metric_timestamp_column: Optional[Column]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.metric_timestamp_column = metric_timestamp_column @property def assets(self) -> Optional[List[Asset]]: return None if self.attributes is None else self.attributes.assets @assets.setter def assets(self, assets: Optional[List[Asset]]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.assets = assets @property def metric_dimension_columns(self) -> Optional[List[Column]]: return ( None if self.attributes is None else self.attributes.metric_dimension_columns ) @metric_dimension_columns.setter def metric_dimension_columns( self, metric_dimension_columns: Optional[List[Column]] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.metric_dimension_columns = metric_dimension_columns class Attributes(DataQuality.Attributes): metric_type: Optional[str] = Field(default=None, description="") metric_s_q_l: Optional[str] = Field(default=None, description="") metric_filters: Optional[str] = Field(default=None, description="") metric_time_grains: Optional[Set[str]] = Field(default=None, description="") metric_timestamp_column: Optional[Column] = Field( default=None, description="" ) # relationship assets: Optional[List[Asset]] = Field( default=None, description="" ) # relationship metric_dimension_columns: Optional[List[Column]] = Field( default=None, description="" ) # relationship attributes: Metric.Attributes = Field( default_factory=lambda: Metric.Attributes(), description=( "Map of attributes in the instance and their values. " "The specific keys of this map will vary by type, " "so are described in the sub-types of this schema." ), )
# Imports required for fixing circular dependencies: from .catalog import Catalog # noqa: I001, E402, F401 from .s_q_l import SQL # noqa: I001, E402, F401 from .column import Column # noqa: E402, F401 from .asset import Asset # noqa: E402, F401