rebuild(stage-6): deliver emotion and market pools
This commit is contained in:
@@ -5,12 +5,14 @@ from typing import Any
|
||||
from backend.data.gateway import DataGateway, MarketDataUnavailable
|
||||
from backend.data.providers.base import ProviderError
|
||||
from backend.data.quality import DataQualityError
|
||||
from backend.features.market.sync import MarketSnapshotService, SnapshotSyncError
|
||||
from backend.http.errors import AppError
|
||||
|
||||
|
||||
class MarketService:
|
||||
def __init__(self, gateway: DataGateway) -> None:
|
||||
def __init__(self, gateway: DataGateway, snapshots: MarketSnapshotService) -> None:
|
||||
self._gateway = gateway
|
||||
self._snapshots = snapshots
|
||||
|
||||
def context(self, requested_date: str | None = None) -> dict[str, Any]:
|
||||
context = self._call(self._gateway.trade_context, requested_date)
|
||||
@@ -76,11 +78,17 @@ class MarketService:
|
||||
def refresh_reference(self) -> dict[str, int | str]:
|
||||
return self._call(self._gateway.refresh_reference)
|
||||
|
||||
def sync_snapshot(self, requested_date: str | None = None) -> dict[str, Any]:
|
||||
return self._call(self._snapshots.sync, requested_date)
|
||||
|
||||
def workspace(self, key: str, requested_date: str | None = None) -> dict[str, Any]:
|
||||
return self._call(self._snapshots.workspace, key, requested_date)
|
||||
|
||||
@staticmethod
|
||||
def _call(function, *args):
|
||||
try:
|
||||
return function(*args)
|
||||
except (MarketDataUnavailable, ProviderError, DataQualityError) as exc:
|
||||
except (MarketDataUnavailable, ProviderError, DataQualityError, SnapshotSyncError) as exc:
|
||||
raise AppError("market_data_unavailable", str(exc), 503) from exc
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user