[tradein] scraper_kit Group E2: cian_valuation → kit (estimator.py dependency, часть #2308) #2335

Closed
opened 2026-07-03 22:34:14 +00:00 by lekss361 · 1 comment
Owner

Родительский: #2308 (Group E). См. #2311 (E1) для контекста дробления.

Контекст

app/services/scrapers/cian_valuation.pyscraper_kit.providers.cian.valuation. Вызывается
из estimator.py:3121estimate_via_cian_valuation(db, address, total_area, rooms_count, floor, total_floors, repair_type="cosmetic", deal_type="sale", use_cache=True, house_id=...).

⚠️ Не «тихий» footgun, а «проглоченный крэш» — опаснее по факту

Kit estimate_via_cian_valuation требует config: ScraperConfig обязательно (без default)
— наивная миграция без config даст немедленный TypeError, не тихую деградацию поведения.
НО call site в estimator.py:3143 обёрнут в blanket try/except Exception (graceful-degradation
для всех Stage 7-9 источников) — TypeError будет молча проглочен, источник просто вернёт
None, неотличимо от штатного "источник недоступен". Проверить: логирует ли except-блок
traceback (logger.exception) или тихо pass/return None без лога — если без лога, баг
конфигурации будет невидим в проде до explicit проверки, не просто "тесты поймают".

cian_valuation внутри зовёт cian_session.load_session/mark_session_invalid — kit-версия
тоже требует config обязательно, консистентно (не отдельный footgun).

DoD

  • Kit-эквивалент используется с явным config=settings на call site
  • Существующий golden-parity тест (_parse_valuation_state) — актуализировать/расширить на
    полный вызов, не только парсинг
  • Explicit тест, доказывающий что при отсутствии config= ошибка ЛОГИРУЕТСЯ достаточно
    громко (не тихо проглатывается blanket except) — если сейчас логирования нет, добавить
    logger.exception в except-блок эстиматора для этого источника (или отдельный issue, если
    трогать estimator.py's except-логику вне scope)
  • Полный suite зелёный, ruff чисто
  • estimator.py НЕ переключать здесь — Group E4, отдельный PR после E1-E3
Родительский: #2308 (Group E). См. #2311 (E1) для контекста дробления. ## Контекст `app/services/scrapers/cian_valuation.py` → `scraper_kit.providers.cian.valuation`. Вызывается из `estimator.py:3121` — `estimate_via_cian_valuation(db, address, total_area, rooms_count, floor, total_floors, repair_type="cosmetic", deal_type="sale", use_cache=True, house_id=...)`. ## ⚠️ Не «тихий» footgun, а «проглоченный крэш» — опаснее по факту Kit `estimate_via_cian_valuation` требует `config: ScraperConfig` **обязательно** (без default) — наивная миграция без config даст немедленный `TypeError`, не тихую деградацию поведения. НО call site в `estimator.py:3143` обёрнут в blanket `try/except Exception` (graceful-degradation для всех Stage 7-9 источников) — `TypeError` будет молча проглочен, источник просто вернёт `None`, неотличимо от штатного "источник недоступен". **Проверить**: логирует ли except-блок traceback (`logger.exception`) или тихо `pass`/`return None` без лога — если без лога, баг конфигурации будет невидим в проде до explicit проверки, не просто "тесты поймают". `cian_valuation` внутри зовёт `cian_session.load_session`/`mark_session_invalid` — kit-версия тоже требует `config` обязательно, консистентно (не отдельный footgun). ## DoD - [ ] Kit-эквивалент используется с явным `config=settings` на call site - [ ] Существующий golden-parity тест (`_parse_valuation_state`) — актуализировать/расширить на полный вызов, не только парсинг - [ ] Explicit тест, доказывающий что при отсутствии `config=` ошибка ЛОГИРУЕТСЯ достаточно громко (не тихо проглатывается blanket except) — если сейчас логирования нет, добавить `logger.exception` в except-блок эстиматора для этого источника (или отдельный issue, если трогать `estimator.py`'s except-логику вне scope) - [ ] Полный suite зелёный, ruff чисто - [ ] `estimator.py` НЕ переключать здесь — Group E4, отдельный PR после E1-E3
lekss361 added the
scope/backend
scrapers
tech-debt
tradein
labels 2026-07-03 22:34:39 +00:00
Author
Owner

Коррекция: E1 — это #2334 (номер в теле issue указан неверно, писал до создания).

Коррекция: E1 — это #2334 (номер в теле issue указан неверно, писал до создания).
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#2335
No description provided.