28 lines
839 B
Python
28 lines
839 B
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
|
|
from app.core_settings import AppSettings, get_settings
|
|
from app.models.definitions import MetricDefinition
|
|
|
|
|
|
@dataclass
|
|
class MetricCatalog:
|
|
settings: AppSettings
|
|
|
|
def get(self, metric_id: str) -> MetricDefinition:
|
|
if metric_id not in self.settings.metrics:
|
|
raise KeyError(f"Unknown metric: {metric_id}")
|
|
return self.settings.metrics[metric_id]
|
|
|
|
def safe_get(self, metric_id: str) -> MetricDefinition | None:
|
|
return self.settings.metrics.get(metric_id)
|
|
|
|
def visible_entities(self) -> list[MetricDefinition]:
|
|
return [self.get(metric_id) for metric_id in self.settings.visible_entity_table if metric_id in self.settings.metrics]
|
|
|
|
|
|
|
|
def get_catalog() -> MetricCatalog:
|
|
return MetricCatalog(get_settings())
|