Files
dzentra_bot/docs/migrations/build_059_2.md

7.0 KiB
Raw Blame History

Build 059.2 — WebSocket OHLC Schema Validation

Проект: Dzentra

Подсистема: Market Data Acquisition

Этап: 059.2

Статус: Completed


Цель

Добавить структурную (schema) валидацию сообщений Dzengi WebSocket OHLC Market Data.

На данном этапе выполняется исключительно проверка структуры полученного JSON.

Никакой parser, предметная проверка значений, Decimal, datetime или mapping во внутренние модели ещё не выполняются.


Причина изменения

Во время Build 058 было подтверждено, что WebSocket OHLC использует отдельный runtime-протокол.

После подписки

OHLCMarketData.subscribe

биржа начинает отправлять события

destination = ohlc.event

с payload следующего вида:

{
  "symbol": "BTC/USD_LEVERAGE",
  "interval": "1m",
  "type": "classic",
  "t": 1784224740000,
  "o": 63992.0,
  "h": 64032.55,
  "l": 63984.0,
  "c": 64032.55
}

До данного Build никакой schema validation для подобных сообщений в проекте не существовало.


Реализовано

Добавлена отдельная схема проверки WebSocket OHLC сообщений.

Добавлены:

ValidatedWebSocketOhlcDocument

и

validate_dzengi_websocket_ohlc_schema()

в файл

src/market_data/acquisition/validation/schema.py

Проверяемые элементы

Проверяется исключительно структура документа.

Проверяются:

  • JSON object

  • наличие payload

  • наличие symbol

  • наличие interval

  • наличие type

  • наличие timestamp

  • наличие open

  • наличие high

  • наличие low

  • наличие close

Никакие значения ещё не интерпретируются.

Например,

t

может быть любым объектом.

Его корректность будет проверяться на этапе Value Validation.


Поддерживаемые оболочки

Schema validator поддерживает все известные варианты, которые уже используются в проекте для остальных WebSocket Feed.

Поддерживаются:

Без оболочки

{
    ...
}

payload

{
    "payload": {
        ...
    }
}

Payload

{
    "Payload": {
        ...
    }
}

Двойная вложенность

{
    "payload": {
        "payload": {
            ...
        }
    }
}

Такая логика полностью соответствует реализованной ранее для Quotes Feed.


Что НЕ проверяется

Schema Validation намеренно не проверяет:

  • формат символа

  • существование инструмента

  • допустимость интервала

  • допустимость типа свечи

  • положительность цен

  • порядок OHLC

  • timestamp

Все перечисленные проверки относятся к следующему слою архитектуры (Value Validation).


Новые исключения

Добавлено специализированное исключение

CandleWebSocketSchemaError

в

src/market_data/acquisition/exceptions.py

Это исключение используется исключительно для структурных ошибок WebSocket OHLC.

Ошибки структуры отделены от ошибок:

  • REST Candles

  • Quotes Feed

  • Instrument Feed


Архитектурное разделение

После Build 059.2 конвейер имеет следующий вид:

WebSocket

↓

Schema Validation

↓

Parser

↓

Value Validation

↓

Mapping

Таким образом каждый слой остаётся полностью независимым.


Unit Tests

Добавлен новый файл

tests/unit/market_data/acquisition/validation/test_websocket_ohlc_schema.py

Проверяются:

  • корректное сообщение

  • отсутствие payload

  • отсутствие symbol

  • отсутствие interval

  • отсутствие type

  • отсутствие t

  • отсутствие o

  • отсутствие h

  • отсутствие l

  • отсутствие c

  • некорректный JSON object

  • вложенные payload

  • вложенные Payload

  • двойная вложенность

  • различные допустимые варианты структуры

Всего реализовано:

20 unit tests

Проверка

Выполнено:

python -m compileall \
src/market_data/acquisition/exceptions.py \
src/market_data/acquisition/validation/schema.py \
tests/unit/market_data/acquisition/validation/test_websocket_ohlc_schema.py

Успешно.


Выполнено:

python -m pytest -q \
tests/unit/market_data/acquisition/validation/test_websocket_ohlc_schema.py

Результат:

20 passed

Выполнена регрессия всех schema validation:

python -m pytest -q \
tests/unit/market_data/acquisition/validation/test_schema.py \
tests/unit/market_data/acquisition/validation/test_quote_schema.py \
tests/unit/market_data/acquisition/validation/test_candle_schema.py \
tests/unit/market_data/acquisition/validation/test_websocket_quote_schema.py \
tests/unit/market_data/acquisition/validation/test_websocket_ohlc_schema.py

Результат:

80 passed

Также выполнено:

git diff --check

Ошибок форматирования не обнаружено.


Совместимость

Изменение полностью обратно совместимо.

Не изменены:

  • REST Candles Feed

  • Quotes Feed

  • ExchangeService

  • runtime

  • Market Analysis

  • Trading


Итог

Build 059.2 завершает создание полноценного структурного слоя проверки сообщений Dzengi WebSocket OHLC.

После данного этапа проект способен безопасно принимать и структурно валидировать входящие сообщения ohlc.event, не выполняя их предметной интерпретации.

Следующим этапом является Build 059.3 — Parser, который будет преобразовывать структурно проверенный документ в транспортную модель DzengiWebSocketOhlcEvent.