Build 060.2: add REST trade transport model

This commit is contained in:
2026-07-18 13:44:50 +03:00
parent c52c099d54
commit 013efd8a97
3 changed files with 1459 additions and 1 deletions

View File

@@ -150,6 +150,17 @@ class DzengiKlinesResponse:
items: tuple[DzengiKline, ...]
# Транспортное представление одной агрегированной сделки
# Dzengi GET /api/v2/aggTrades.
@dataclass(frozen=True, slots=True)
class DzengiRestAggTrade:
aggregate_trade_id: int
price: DzengiRawNumeric
quantity: DzengiRawNumeric
timestamp: int
buyer_is_maker: bool
# Транспортное представление одного события Dzengi WebSocket ohlc.event.
#
# Событие содержит завершённую OHLC-свечу без объёма и поэтому не является

View File

@@ -13,6 +13,7 @@ from src.market_data.acquisition.adapters.dzengi.models import (
DzengiLotSizeFilter,
DzengiMinNotionalFilter,
DzengiRateLimit,
DzengiRestAggTrade,
DzengiUnknownFilter,
)
@@ -204,3 +205,48 @@ def test_raw_models_are_immutable() -> None:
with pytest.raises(FrozenInstanceError):
response.status = "OK" # type: ignore[misc]
def test_rest_agg_trade_stores_complete_transport_contract() -> None:
trade = DzengiRestAggTrade(
aggregate_trade_id=2134857062,
price="64497.25",
quantity="0.005",
timestamp=1784218066823,
buyer_is_maker=False,
)
assert trade.aggregate_trade_id == 2134857062
assert trade.price == "64497.25"
assert trade.quantity == "0.005"
assert trade.timestamp == 1784218066823
assert trade.buyer_is_maker is False
def test_rest_agg_trade_preserves_raw_numeric_values() -> None:
trade = DzengiRestAggTrade(
aggregate_trade_id=2134846831,
price=64555.55,
quantity=2,
timestamp=1784218012030,
buyer_is_maker=True,
)
assert trade.price == 64555.55
assert isinstance(trade.price, float)
assert trade.quantity == 2
assert isinstance(trade.quantity, int)
def test_rest_agg_trade_is_immutable_and_uses_slots() -> None:
trade = DzengiRestAggTrade(
aggregate_trade_id=2134857062,
price="64497.25",
quantity="0.005",
timestamp=1784218066823,
buyer_is_maker=False,
)
assert not hasattr(trade, "__dict__")
with pytest.raises(FrozenInstanceError):
trade.price = "1.00" # type: ignore[misc]

File diff suppressed because it is too large Load Diff