summaryrefslogtreecommitdiff
path: root/services/data-collector/src/data_collector/ws_factory.py
diff options
context:
space:
mode:
authorTheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com>2026-04-01 17:46:56 +0900
committerTheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com>2026-04-01 17:46:56 +0900
commitc294e9df6207973306f58186d278e12399f162a3 (patch)
tree9f847439eb29c82a77da0dcf7fe426cfa0cbe65b /services/data-collector/src/data_collector/ws_factory.py
parent69e88b3b353f1a2ab7a78259b480e8afbd87669c (diff)
fix: WS factory, backtester config, CI docker builds, health port docs
Diffstat (limited to 'services/data-collector/src/data_collector/ws_factory.py')
-rw-r--r--services/data-collector/src/data_collector/ws_factory.py33
1 files changed, 33 insertions, 0 deletions
diff --git a/services/data-collector/src/data_collector/ws_factory.py b/services/data-collector/src/data_collector/ws_factory.py
new file mode 100644
index 0000000..b8e2719
--- /dev/null
+++ b/services/data-collector/src/data_collector/ws_factory.py
@@ -0,0 +1,33 @@
+"""WebSocket factory for exchange-specific connections."""
+import logging
+
+from data_collector.binance_ws import BinanceWebSocket
+
+logger = logging.getLogger(__name__)
+
+# Supported exchanges for WebSocket streaming
+SUPPORTED_WS = {"binance": BinanceWebSocket}
+
+
+def create_websocket(exchange_id: str, **kwargs):
+ """Create an exchange-specific WebSocket handler.
+
+ Args:
+ exchange_id: Exchange identifier (e.g. 'binance')
+ **kwargs: Passed to the WebSocket constructor (symbols, timeframe, on_candle)
+
+ Returns:
+ WebSocket handler instance
+
+ Raises:
+ ValueError: If exchange is not supported for WebSocket streaming
+ """
+ ws_cls = SUPPORTED_WS.get(exchange_id)
+ if ws_cls is None:
+ supported = ", ".join(sorted(SUPPORTED_WS.keys()))
+ raise ValueError(
+ f"WebSocket streaming not supported for '{exchange_id}'. "
+ f"Supported: {supported}. "
+ f"Use REST polling as fallback for unsupported exchanges."
+ )
+ return ws_cls(**kwargs)