Build 060.9: add WebSocket Trade Transport Model

This commit is contained in:
2026-07-19 13:19:47 +03:00
parent 2523d715e7
commit 0b4edca287
3 changed files with 1025 additions and 0 deletions

View File

@@ -161,6 +161,19 @@ class DzengiRestAggTrade:
buyer_is_maker: bool
# Транспортное представление одного события
# Dzengi WebSocket internal.trade.
@dataclass(frozen=True, slots=True)
class DzengiWebSocketTradeEvent:
trade_id: int
price: DzengiRawNumeric
size: DzengiRawNumeric
timestamp: int
symbol: str
buyer: bool
order_id: str
# Транспортное представление одного события Dzengi WebSocket ohlc.event.
#
# Событие содержит завершённую OHLC-свечу без объёма и поэтому не является

View File

@@ -15,6 +15,7 @@ from src.market_data.acquisition.adapters.dzengi.models import (
DzengiRateLimit,
DzengiRestAggTrade,
DzengiUnknownFilter,
DzengiWebSocketTradeEvent,
)
@@ -250,3 +251,57 @@ def test_rest_agg_trade_is_immutable_and_uses_slots() -> None:
with pytest.raises(FrozenInstanceError):
trade.price = "1.00" # type: ignore[misc]
def test_websocket_trade_event_stores_complete_transport_contract() -> None:
event = DzengiWebSocketTradeEvent(
trade_id=2134846831,
price=64555.55,
size=0.002,
timestamp=1784218012030,
symbol="BTC/USD_LEVERAGE",
buyer=False,
order_id="00a02503-0079-54c4-0000-000081e62b58",
)
assert event.trade_id == 2134846831
assert event.price == 64555.55
assert event.size == 0.002
assert event.timestamp == 1784218012030
assert event.symbol == "BTC/USD_LEVERAGE"
assert event.buyer is False
assert event.order_id == "00a02503-0079-54c4-0000-000081e62b58"
def test_websocket_trade_event_preserves_raw_numeric_values() -> None:
event = DzengiWebSocketTradeEvent(
trade_id=2134846831,
price="64555.55",
size="0.002",
timestamp=1784218012030,
symbol="BTC/USD_LEVERAGE",
buyer=True,
order_id="order-id",
)
assert event.price == "64555.55"
assert isinstance(event.price, str)
assert event.size == "0.002"
assert isinstance(event.size, str)
def test_websocket_trade_event_is_immutable_and_uses_slots() -> None:
event = DzengiWebSocketTradeEvent(
trade_id=2134846831,
price=64555.55,
size=0.002,
timestamp=1784218012030,
symbol="BTC/USD_LEVERAGE",
buyer=False,
order_id="order-id",
)
assert not hasattr(event, "__dict__")
with pytest.raises(FrozenInstanceError):
event.price = 1.0 # type: ignore[misc]