from .utils import fetch def create_endpoints_dict(endpoints): return { endpoint["path"]: { "assets": {asset["symbol"]: asset["tags"] for asset in endpoint["assets"]}, "currencies": endpoint["currencies"], "resolutions": endpoint["resolutions"], "formats": endpoint["formats"], } for endpoint in endpoints } """ @pattern Singleton (GoF:127) """ class MetaEndpoints(type): _instances = {} def __call__(cls, *args, **kwargs): if cls not in cls._instances: instance = super().__call__(*args, **kwargs) cls._instances[cls] = instance return cls._instances[cls] class Endpoints(metaclass=MetaEndpoints): _endpoints = None @property def endpoints(self): return self._endpoints @endpoints.setter def endpoints(self, api_key): self._endpoints = create_endpoints_dict( fetch("/v2/metrics/endpoints", {"api_key": api_key}) ) def query(self, path): return self._endpoints[path]