build 059.7: add websocket OHLC adapter

This commit is contained in:
2026-07-17 11:44:03 +03:00
parent 85e9662f5b
commit 20a70df1f0
3 changed files with 904 additions and 0 deletions

View File

@@ -5,16 +5,21 @@ from __future__ import annotations
from datetime import datetime, timezone
from src.market_data.acquisition.adapters.dzengi.mapper import (
map_dzengi_websocket_ohlc_to_candle_close_event,
map_dzengi_websocket_quote_to_quote,
)
from src.market_data.acquisition.adapters.dzengi.parser import (
parse_dzengi_websocket_ohlc,
parse_dzengi_websocket_quote,
)
from src.market_data.acquisition.models.candle_close import CandleCloseEvent
from src.market_data.acquisition.models.quote import Quote
from src.market_data.acquisition.validation.schema import (
validate_dzengi_websocket_ohlc_schema,
validate_dzengi_websocket_quote_schema,
)
from src.market_data.acquisition.validation.values import (
validate_dzengi_websocket_ohlc_values,
validate_dzengi_websocket_quote_values,
)
@@ -35,3 +40,22 @@ class DzengiWebSocketQuoteAdapter:
response,
received_at=received_at or datetime.now(timezone.utc),
)
# Преобразует одно декодированное сообщение Dzengi WebSocket
# в CandleCloseEvent.
class DzengiWebSocketOhlcAdapter:
def map_message(
self,
document: object,
*,
received_at: datetime | None = None,
) -> CandleCloseEvent:
validated = validate_dzengi_websocket_ohlc_schema(document)
event = parse_dzengi_websocket_ohlc(validated)
validate_dzengi_websocket_ohlc_values(event)
return map_dzengi_websocket_ohlc_to_candle_close_event(
event,
received_at=received_at or datetime.now(timezone.utc),
)