5.3 KiB
5.3 KiB
Code Review #2: polygon v0.2.2 (после decouple)
Адресат: Claude Sonnet 4.6 (новый чат) Дата: 2026-07-31 Предыдущее ревью: v0.2.0 (12 находок, 2 крит. исправлены) ⛔ ОТВЕТ — ТОЛЬКО В ЧАТ. Не редактировать файлы.
Контекст
После первого ревью (v0.2.0) были исправлены 2 критических бага и проведён
decouple-рефакторинг: монолитный app.py (418 строк) разнесён на blueprint'ы
по шаблону app-autotest. CSS и HTML вынесены из Python-строк в отдельные файлы.
Актуальная версия: v0.2.2, задеплоена на polygon.pythonk8s.dev.nubes.ru.
23/23 curl-тестов PASS, 19/19 pytest PASS.
Новая структура
polygon/site/
├── app.py # 57 строк: Flask(), 6 blueprint'ов, app.run()
├── routes/
│ ├── root.py # /health, / (Jinja2 render_template)
│ ├── services_routes.py # GET /api/v1/svc/services, /services/<id>
│ ├── instances_routes.py # GET/POST /api/v1/svc/instances, GET /instances/<uid>
│ ├── operations_routes.py # /instanceOperations/* (5 эндпоинтов: default, create, status, params, validate)
│ ├── run.py # POST /instanceOperations/<uid>/run
│ └── mock_routes.py # /_mock/* (reset, state, services, delay)
├── state/
│ ├── mock_state.py # MockState (in-memory, UUID v4, пагинация)
│ └── state_machine.py # apply_effect() + _merge_params()
├── config/
│ └── loader.py # load_services() + модульные переменные SERVICES/OPS_INDEX/DELAY
├── utils/
│ ├── now.py # now() — UTC ISO с 'Z'
│ └── pluralize.py # pluralize() — одна функция
├── converter/
│ └── from_stands.py # конвертер STANDS YAML → polygon config
├── static/
│ └── style.css # тёмная тема (из f-строки)
├── templates/
│ └── index.html # Jinja2-шаблон (из f-строки)
└── services/
└── 37 YAML-конфигов
Что изменилось с прошлого ревью
| v0.2.0 | v0.2.2 |
|---|---|
app.py 418 строк, всё в одном |
app.py 57 строк, только скелет |
17 @app.route(...) в одном файле |
7 blueprint-файлов в routes/ |
CSS в f-строке index() |
static/style.css |
HTML в f-строке index() |
templates/index.html (Jinja2) |
_now() в app.py + mock_state.py |
utils/now.py |
_pluralize() в state_machine + from_stands |
utils/pluralize.py |
config_loader.py |
config/loader.py (модульные переменные) |
--workers 2 в docstring |
--workers 1 + WEB_CONCURRENCY=1 |
cfs_params[pid] → KeyError |
cfs_params.get(pid) → безопасно |
Что проверять
1. Корректность blueprint-регистрации
- Все 17+ маршрутов на месте?
- Порядок
default/<int>перед<uid>сохранён в operations_routes.py? - Нет коллизий имён blueprint'ов?
url_prefixне дублируется с путями в@bp.route()?
2. Импорты и зависимости
- Нет циклических импортов между модулями?
config/loader.py— модульные переменные инициализируются ровно один раз?routes/run.pyиroutes/mock_routes.pyправильно работают сconfig.loader.DELAYчерез_cfg.DELAY = seconds?- Старый
config_loader.pyудалён — нигде не осталось импортов?
3. Порядок вызова функций
- При дроблении не нарушен ли порядок: validate → set_param → run → apply_effect?
apply_effectвызывается с правильными аргументами (mock_state.state, SERVICES)?_merge_paramsне сломан после переноса в отдельный модуль?
4. CSS/HTML разделение
render_template("index.html", ...)передаёт все нужные переменные?- CSS не потерян при переносе?
url_for('static', filename='style.css')корректный?
5. Качество кода новых файлов
- Комментарии к каждой функции на месте?
- Имена переменных понятные?
- Нет дублирования логики между blueprint'ами?
Формат ответа
Сгруппируй находки:
- 🔴 Критические (сломает работу)
- 🟡 Средние (потенциальная проблема)
- 🔵 Минорные (стиль, имена)
Для каждой: файл, проблема, предлагаемое исправление.
Если по какой-то категории всё ок — напиши «проблем не найдено».