355 lines
7.1 KiB
Markdown
355 lines
7.1 KiB
Markdown
# Build 054 — Удаление legacy API get_klines и compatibility bridge
|
||
|
||
## Статус
|
||
|
||
**Завершён**
|
||
|
||
---
|
||
|
||
## Цель Build
|
||
|
||
Удалить больше не используемый compatibility API legacy OHLCV:
|
||
|
||
```text
|
||
ExchangeService.get_klines()
|
||
```
|
||
|
||
а также внутренний bridge:
|
||
|
||
```text
|
||
ExchangeService._kline_from_candle()
|
||
```
|
||
|
||
и связанный test-only файл:
|
||
|
||
```text
|
||
tests/unit/integrations/exchange/test_service_klines.py
|
||
```
|
||
|
||
Build 054 не удаляет сами модели:
|
||
|
||
```text
|
||
Kline
|
||
KlineBatch
|
||
```
|
||
|
||
Они сохраняются до отдельного Build после повторной глобальной проверки зависимостей.
|
||
|
||
---
|
||
|
||
## Исходное состояние
|
||
|
||
По результатам Build 052 было подтверждено:
|
||
|
||
- production-вызовы `ExchangeService.get_klines()` отсутствуют;
|
||
- `get_klines()` используется только тестами;
|
||
- `_kline_from_candle()` используется только внутри `get_klines()` и его тестов;
|
||
- `Kline` и `KlineBatch` остаются только внутри compatibility-слоя;
|
||
- активный Market Analysis полностью использует `ExchangeService.get_candles()`.
|
||
|
||
После Build 053 также был удалён последний неиспользуемый production-файл:
|
||
|
||
```text
|
||
src/trading/market_analysis/indicators_legacy.py
|
||
```
|
||
|
||
Таким образом compatibility API больше не обслуживал ни одного рабочего потребителя.
|
||
|
||
---
|
||
|
||
## Объём изменений
|
||
|
||
В Build 054 изменён:
|
||
|
||
```text
|
||
src/integrations/exchange/service.py
|
||
```
|
||
|
||
Удалён:
|
||
|
||
```text
|
||
tests/unit/integrations/exchange/test_service_klines.py
|
||
```
|
||
|
||
Добавлена документация:
|
||
|
||
```text
|
||
docs/migrations/build_054.md
|
||
```
|
||
|
||
Build 054 не изменяет:
|
||
|
||
```text
|
||
src/integrations/exchange/models.py
|
||
src/market_data/acquisition/
|
||
src/trading/market_analysis/
|
||
```
|
||
|
||
Build также не удаляет:
|
||
|
||
```text
|
||
Kline
|
||
KlineBatch
|
||
```
|
||
|
||
---
|
||
|
||
## Изменения в ExchangeService
|
||
|
||
Из файла:
|
||
|
||
```text
|
||
src/integrations/exchange/service.py
|
||
```
|
||
|
||
удалены импорты:
|
||
|
||
```text
|
||
Kline
|
||
KlineBatch
|
||
```
|
||
|
||
Удалён публичный legacy-метод:
|
||
|
||
```text
|
||
ExchangeService.get_klines()
|
||
```
|
||
|
||
Удалён внутренний compatibility helper:
|
||
|
||
```text
|
||
ExchangeService._kline_from_candle()
|
||
```
|
||
|
||
Остальной код `ExchangeService` сохранён без изменений.
|
||
|
||
---
|
||
|
||
## Удаление test-only compatibility coverage
|
||
|
||
Удалён файл:
|
||
|
||
```text
|
||
tests/unit/integrations/exchange/test_service_klines.py
|
||
```
|
||
|
||
Он полностью покрывал уже удалённые компоненты:
|
||
|
||
```text
|
||
get_klines()
|
||
_kline_from_candle()
|
||
Candle → Kline
|
||
KlineBatch
|
||
```
|
||
|
||
Новый канонический API продолжает покрываться файлом:
|
||
|
||
```text
|
||
tests/unit/integrations/exchange/test_service_candles.py
|
||
```
|
||
|
||
---
|
||
|
||
## Архитектурный результат
|
||
|
||
До Build 054:
|
||
|
||
```text
|
||
ExchangeService.get_klines()
|
||
↓
|
||
ExchangeService.get_candles()
|
||
↓
|
||
Candle
|
||
↓
|
||
_kline_from_candle()
|
||
↓
|
||
Kline
|
||
↓
|
||
KlineBatch
|
||
```
|
||
|
||
После Build 054:
|
||
|
||
```text
|
||
ExchangeService.get_candles()
|
||
↓
|
||
tuple[Candle, ...]
|
||
```
|
||
|
||
Compatibility bridge полностью удалён.
|
||
|
||
---
|
||
|
||
## Полный regression suite
|
||
|
||
После удаления выполнена команда:
|
||
|
||
```bash
|
||
python -m pytest -q
|
||
```
|
||
|
||
Результат:
|
||
|
||
```text
|
||
779 passed in 2.66s
|
||
```
|
||
|
||
Снижение количества тестов связано с удалением test-only файла:
|
||
|
||
```text
|
||
tests/unit/integrations/exchange/test_service_klines.py
|
||
```
|
||
|
||
Регрессий не обнаружено.
|
||
|
||
---
|
||
|
||
## Контроль отсутствия get_klines
|
||
|
||
Выполнена команда:
|
||
|
||
```bash
|
||
grep -RIn \
|
||
--exclude-dir="__pycache__" \
|
||
--exclude="*.pyc" \
|
||
"\.get_klines(" \
|
||
src tests
|
||
```
|
||
|
||
Результат:
|
||
|
||
```text
|
||
пусто
|
||
```
|
||
|
||
---
|
||
|
||
## Контроль отсутствия _kline_from_candle
|
||
|
||
Выполнена команда:
|
||
|
||
```bash
|
||
grep -RIn \
|
||
--exclude-dir="__pycache__" \
|
||
--exclude="*.pyc" \
|
||
"_kline_from_candle" \
|
||
src tests
|
||
```
|
||
|
||
Результат:
|
||
|
||
```text
|
||
пусто
|
||
```
|
||
|
||
---
|
||
|
||
## Контроль оставшихся Kline и KlineBatch
|
||
|
||
Выполнена команда:
|
||
|
||
```bash
|
||
grep -RIn \
|
||
--exclude-dir="__pycache__" \
|
||
--exclude="*.pyc" \
|
||
-E "\bKlineBatch\b|\bKline\b" \
|
||
src tests
|
||
```
|
||
|
||
Результат:
|
||
|
||
```text
|
||
src/integrations/exchange/models.py:93:class Kline:
|
||
src/integrations/exchange/models.py:110:class KlineBatch:
|
||
src/integrations/exchange/models.py:113: candles: list[Kline]
|
||
```
|
||
|
||
Следовательно, после Build 054 `Kline` и `KlineBatch` существуют только как неиспользуемые определения моделей.
|
||
|
||
---
|
||
|
||
## Проверка форматирования
|
||
|
||
Выполнена команда:
|
||
|
||
```bash
|
||
git diff --check
|
||
```
|
||
|
||
Вывод отсутствует.
|
||
|
||
Whitespace-ошибок не обнаружено.
|
||
|
||
---
|
||
|
||
## Фактический diff
|
||
|
||
Перед добавлением документации:
|
||
|
||
```text
|
||
app/src/integrations/exchange/service.py | 69 ------------------
|
||
app/tests/unit/integrations/exchange/test_service_klines.py | 551 -----------------------------------------------------------------------------------------------------------------------------------------------
|
||
2 files changed, 620 deletions(-)
|
||
```
|
||
|
||
---
|
||
|
||
## Что намеренно не выполнено
|
||
|
||
Build 054 намеренно не включает:
|
||
|
||
- удаление `Kline`;
|
||
- удаление `KlineBatch`;
|
||
- изменение `src/integrations/exchange/models.py`;
|
||
- изменение `ExchangeService.get_candles()`;
|
||
- изменение Market Data Acquisition;
|
||
- изменение Market Analysis;
|
||
- изменение торговой логики;
|
||
- изменение структуры каталогов.
|
||
|
||
---
|
||
|
||
## Критерии завершения
|
||
|
||
Build 054 считается завершённым, поскольку:
|
||
|
||
- production-потребители `get_klines()` отсутствовали до удаления;
|
||
- `get_klines()` удалён;
|
||
- `_kline_from_candle()` удалён;
|
||
- test-only compatibility coverage удалено;
|
||
- полный suite проходит;
|
||
- grep по `get_klines()` пустой;
|
||
- grep по `_kline_from_candle()` пустой;
|
||
- `Kline` и `KlineBatch` остались только в `models.py`;
|
||
- `git diff --check` чистый.
|
||
|
||
---
|
||
|
||
## Итог
|
||
|
||
**Build 054 завершён успешно.**
|
||
|
||
Текущее состояние:
|
||
|
||
```text
|
||
get_klines — удалён
|
||
_kline_from_candle — удалён
|
||
test_service_klines.py — удалён
|
||
Full test suite — 779 passed
|
||
Kline/KlineBatch — только неиспользуемые определения в models.py
|
||
```
|
||
|
||
Следующий этап — удалить модели:
|
||
|
||
```text
|
||
Kline
|
||
KlineBatch
|
||
```
|
||
|
||
из:
|
||
|
||
```text
|
||
src/integrations/exchange/models.py
|
||
```
|
||
|
||
после повторной глобальной проверки. |