Skip to content

fix: сохранение результатов постранично перед пометкой просмотренными (fixes #300) - #331

Open
eminsk wants to merge 1 commit into
Duff89:masterfrom
eminsk:fix/atomic-page-save
Open

fix: сохранение результатов постранично перед пометкой просмотренными (fixes #300)#331
eminsk wants to merge 1 commit into
Duff89:masterfrom
eminsk:fix/atomic-page-save

Conversation

@eminsk

@eminsk eminsk commented Sep 8, 2026

Copy link
Copy Markdown

Проблема (fixes #300)

В текущей версии объявления помечаются просмотренными в базе данных SQLite (__save_viewed) сразу на каждой странице, а сохранение в файл (result_storage.save) вызывается только один раз в самом конце, после завершения цикла по всем страницам ссылки:

  • Если при парсинге нескольких страниц (например, count > 1) на последующих страницах происходит сетевая ошибка, блокировка 429 или пользователь нажимает «Стоп», функция parse() прерывается, и result_storage.save() не вызывается.
  • При этом объявления с первой страницы уже зафиксированы в SQLite как просмотренные. При следующем запуске они отфильтровываются и навсегда теряются.

Решение

  1. Инкрементальное сохранение: self.result_storage.save(filtered_ads) перенесено внутрь цикла по страницам перед self.__save_viewed(ads=filtered_ads).
  2. Гарантия целостности данных: Пометка в БД как «просмотрено» происходит только после успешной записи в файл. Если сохранение в файл упадет (например, файл заблокирован открытым Excel), объявления не будут ошибочно помечены в БД.
  3. Безопасная остановка: При нажатии «Стоп» или сбое сети на любой странице все ранее спарсенные страницы гарантированно сохранены.
  4. Тесты: Добавлен набор unit-тестов в tests/test_page_save.py, проверяющий сохранение при сбоях и строгий порядок операций.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant