2.6 KiB
2.6 KiB
Dev Report: Pagination Fix — commit per page + дедупликация
Дата: 2026-04-22
Статус: DONE ✅
ТЗ: TZ-fr24-worker-pagination-fix.md
Исполнитель: subagent dev-pagination-fix
Итог
Все изменения реализованы строго по ТЗ. Синтаксис проверен — ошибок нет.
Изменения
config.py
- Добавлено поле
MAX_PAGES: int = int(os.getenv("FR24_MAX_PAGES", "200"))
Защитный лимит: 200 страниц × 20 = 4000 рейсов максимум.
fr24_worker.py
-
Удалена функция
fetch_flight_summaries()— накапливала все страницы в памяти, при ошибке всё терялось. -
Добавлен генератор
iter_flight_summary_pages(target_date: date) -> Iterator[List[Dict]]:- Возвращает страницы по одной (yield)
- Дедупликация по
fr24_idчерезseen_fr24_ids: set— убирает ×4 дубли отboth:SVO,both:DME,both:VKO,both:ZIA - Ловит исключения на каждой странице (break с логом, не падает весь процесс)
- Защитный лимит
config.MAX_PAGESс предупреждением в лог - Debug-лог: page, offset, got, unique, total_seen
-
Переписан блок в
run():- Убран блок
try: summaries = fetch_flight_summaries(...) - Итерация через
for page in iter_flight_summary_pages(target_date): stats["flights_found"] += len(page)— инкрементальный счётчик- После обработки каждой страницы —
conn.commit()с логом - При ошибке commit —
conn.rollback()+stats["errors"] += 1 - Индивидуальные
conn.commit()per-flight убраны (остался только per-page)
- Убран блок
Проверка синтаксиса
$ python3 -m py_compile config.py && echo OK
config.py OK
$ python3 -m py_compile fr24_worker.py && echo OK
fr24_worker.py OK
Следующий шаг (деплой)
docker cp ingest/tracks_fr24/fr24_worker.py fr24-ingest:/app/ingest/tracks_fr24/fr24_worker.py
docker cp ingest/tracks_fr24/config.py fr24-ingest:/app/ingest/tracks_fr24/config.py
Проверка:
POST http://fr24-vm:8001/run?date=2026-04-19
Должны появляться строки в flight_actual постепенно, не ждать конца всей загрузки.