7.0 KiB
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.