30 lines
554 B
Python
30 lines
554 B
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
from typing import Literal
|
|
|
|
|
|
DataUsage = Literal["display", "calculation"]
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class ProviderContract:
|
|
id: str
|
|
provider_class: str
|
|
calculation_allowed: bool
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class DatasetContract:
|
|
id: str
|
|
entity: str
|
|
frequency: str
|
|
primary: str
|
|
fallbacks: tuple[str, ...]
|
|
usage: str
|
|
fields: tuple[str, ...]
|
|
|
|
@property
|
|
def providers(self) -> tuple[str, ...]:
|
|
return (self.primary, *self.fallbacks)
|