summaryrefslogtreecommitdiff
path: root/services/data-collector/src/data_collector/ws_factory.py
diff options
context:
space:
mode:
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)