Conversation
- Fix AttributeError in geo address filter by accessing Pydantic model attributes safely (fixes Duff89#324) - Fix price range filter to validate items individually without dropping the whole batch on None price - Safely handle None images, priceDetailed, urlPath, and sortTimeStamp in Excel export (fixes Duff89#325) - Preserve integer 0 view count instead of empty string in Excel export - Safely handle None in vas promotion payloads in parser_cls and ads_filter - Run parser loop in worker thread to prevent Flet GUI freeze and allow stop button to respond (fixes Duff89#326) - Fix stop_event handling in parser_cls by calling .set() instead of assigning bool (fixes Duff89#326) - Add comprehensive unit test suite in tests/
eminsk
force-pushed
the
fix/geo-excel-gui-issues
branch
from
September 4, 2026 16:53
8990aac to
62bfaed
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Комплексное исправление критических ошибок парсера, экспорта и GUI
PR устраняет взаимосвязанные проблемы и краевые сбои в обработке данных Avito, экспорте и графическом интерфейсе Flet.
1. Падение и краевые сбои фильтрации (Fixes #324)
filters/ads_filter.py): заменено некорректное обращение.get()на Pydantic-моделиItemна безопасный доступad.geo.formattedAddress, добавлена нечувствительность к регистру и очистка пробелов (.strip().lower()).priceDetailed is None— обычное дело для вакансий или договорных цен) приводило к исключению в генераторе списка и аварийному возврату всех объявлений без фильтрации по цене. Теперь валидация производится поэлементно с дефолтом0.isPromotion): добавлена защита отNoneв(step.payload or {}).get("vas")— ранее при значенииvas: nullв JSON возникалоTypeError: 'NoneType' object is not iterable.datetime.utcnow()заменен наdatetime.now(timezone.utc).2. Ошибки экспорта в Excel и базы данных (Fixes #325)
parser/export/excel.py:ad.images is None), без цены (ad.priceDetailed is None), без ссылки (ad.urlPath is None) и без координат (ad.coords is None).try/exceptизвлечение даты публикации: поврежденные таймстампы больше не срывают экспорт всего файла.0(ранееad.total_views or ""заменяло0на пустую ячейку).=,+,-,@) для всех строковых полей.db_service.py:viewedпри отсутствииpriceDetailed.3. Зависание интерфейса Flet и остановка парсера (Fixes #326)
AvitoParser.py:_worker, освобождая UI-поток Flet для мгновенной реакции на кнопку «Стоп».run_process()с блокирующим вызовом.join().parser_cls.py:self.stop_event = True(ломавшей объектthreading.Eventв булево значение) теперь вызываетсяself.stop_event.set().Тестирование
Создан структурированный набор модульных тестов в директории
tests/:tests/test_ads_filter.py— проверка адресного фильтра, ценового диапазона с отсутствующими ценами, промо-пакетов сnullи фильтра по времени.tests/test_excel_export.py— проверка экспорта объявлений сNone-полями, нулевыми просмотрами, защитой от CSV/Excel injection и координатами.tests/test_db_service.py— проверка записи в SQLite записей без цены и проверки дубликатов.tests/test_parser_cls.py— проверка сохранения объектаthreading.Event, очистки null-объявлений и фильтрации.Все 17 тестов успешно проходят (
17 passed in 0.96s).