def get_metric_definitions()

in sync/metrichub.py [0:0]


def get_metric_definitions() -> List[MetricHubDefinition]:
    config_collection = ConfigCollection.from_github_repos(
        [METRIC_HUB_REPO_URL, LOOKER_METRICS_URL]
    )

    metrics = []
    for definition in config_collection.definitions:
        for (
            metric_name,
            metric,
        ) in definition.spec.metrics.definitions.items():
            # Some metrics don't have data sources
            # (e.g. ad_click_rate, chained metric used in jetstream)
            tables = None
            datasource = None
            if metric.data_source is not None:
                datasource = config_collection.get_data_source_definition(
                    slug=metric.data_source.name, app_name=definition.platform
                )
                tables = [
                    table.format(dataset=datasource.default_dataset)
                    for table in _extract_table_references(datasource.from_expression)
                ]

            statistics = []
            if metric.statistics is not None:
                for statistic_name, _ in metric.statistics.items():
                    statistics.append(MetricStatistic(name=statistic_name))

            metrics.append(
                MetricHubDefinition(
                    name=metric.name,
                    description=metric.description or "",
                    owners=(
                        [metric.owner]
                        if isinstance(metric.owner, str)
                        else metric.owner
                    ),
                    level=metric.level if metric.level else None,
                    friendly_name=(
                        metric.friendly_name if metric.friendly_name else None
                    ),
                    deprecated=metric.deprecated or False,
                    sql_definition=metric.select_expression,
                    product=definition.platform,
                    bigquery_tables=tables,
                    statistics=statistics,
                    data_source=datasource.name if datasource else None,
                )
            )

    return metrics