from __future__ import annotations from app.config import Settings from app.market.base import MarketData from app.market.binance import BinanceMarketData from app.market.coinbase import CoinbaseMarketData from app.market.fake import FakeMarketData from app.market.kraken import KrakenMarketData _FEEDS: dict[str, type[MarketData]] = { "binance": BinanceMarketData, "binanceus": BinanceMarketData, "kraken": KrakenMarketData, "coinbase": CoinbaseMarketData, } def build_market_data(settings: Settings) -> MarketData: try: feed_cls = _FEEDS[settings.exchange.lower()] except KeyError: raise ValueError( f"unsupported exchange: {settings.exchange}. available: {sorted(_FEEDS)}" ) from None return feed_cls() __all__ = [ "FakeMarketData", "MarketData", "build_market_data", ]