Build 060.9: add WebSocket Trade Transport Model
This commit is contained in:
@@ -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-свечу без объёма и поэтому не является
|
||||
|
||||
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user