fix(tradein/avito): консолидировать house_type normalizer + актуализировать docstring (#2009) #2340

Merged
lekss361 merged 1 commit from fix/tradein-2009-recheck-avito-house-type into main 2026-07-03 22:47:06 +00:00
Owner

Closes #2009

Исходный DoD-приоритет 1 (house_type + house_catalog_url сохраняются в save_detail_enrichment) уже был закрыт ранее — PR #2014, коммит 4a93a929 (2026-06-27), задолго до этого прохода. Живой прод-код это уже неделю делает.

Реальный gap, закрытый этим PR (DoD-приоритет 2 — "не дублируй, переиспользуй #2007"):

  • avito_detail.py держал локальный дубль-мэппинг _HOUSE_TYPE_MAP (6 русских лейблов → канон), хотя shared house_type_normalizer.normalize_house_type() (#2007, уже смержен) для этого и существует.
  • Перевёл parse_detail_html на normalize_house_type(), удалил локальный _HOUSE_TYPE_MAP.
  • Добавил avito-вокабуляр (монолитный/панельный/кирпичный/монолитно-кирпичный/блочный/деревянный → канон) в общий house_type_normalizer.py::_RAW_TO_CANON, третьим источником рядом с yandex SCREAMING_SNAKE и cian camelCase.
  • 6 новых parametrized-тестов на avito-вокабуляр.
  • Починил 3 устаревших docstring/комментария, которые всё ещё утверждали "house-level поля собираются, но НЕ сохраняются" (правда до PR #2014, сейчас вводит в заблуждение).

DoD-приоритет 3 (total_floors_house/elevators/concierge/closed_yard) — подтверждено by-design, НЕ пропуск: эти поля уже имеют канонический источник (avito_houses.py Stage 2c пишет их напрямую в houses, листинг линкуется через house_url); дублировать в listings намеренно не стали (избегаем two-sources-of-truth).

Проверено: ruff чисто, 75 relevant tests + широкий scoped run (avito/house_type) 485 passed, полный backend suite 3206 passed (1 pre-existing unrelated failure, репродуцирован на чистом main тоже — не регрессия этого PR). code-reviewer APPROVE.

Known minor drift (не блокирует): tradein-mvp/packages/scraper-kit/ содержит отдельную копию house_type_normalizer.py — avito-вокабуляр добавлен только в app-level версию (scraper-kit пока не имеет avito_detail эквивалента, dormant migration track #2277).

Closes #2009 Исходный DoD-приоритет 1 (house_type + house_catalog_url сохраняются в `save_detail_enrichment`) **уже был закрыт** ранее — PR #2014, коммит `4a93a929` (2026-06-27), задолго до этого прохода. Живой прод-код это уже неделю делает. Реальный gap, закрытый этим PR (DoD-приоритет 2 — "не дублируй, переиспользуй #2007"): - `avito_detail.py` держал локальный дубль-мэппинг `_HOUSE_TYPE_MAP` (6 русских лейблов → канон), хотя shared `house_type_normalizer.normalize_house_type()` (#2007, уже смержен) для этого и существует. - Перевёл `parse_detail_html` на `normalize_house_type()`, удалил локальный `_HOUSE_TYPE_MAP`. - Добавил avito-вокабуляр (монолитный/панельный/кирпичный/монолитно-кирпичный/блочный/деревянный → канон) в общий `house_type_normalizer.py::_RAW_TO_CANON`, третьим источником рядом с yandex SCREAMING_SNAKE и cian camelCase. - 6 новых parametrized-тестов на avito-вокабуляр. - Починил 3 устаревших docstring/комментария, которые всё ещё утверждали "house-level поля собираются, но НЕ сохраняются" (правда до PR #2014, сейчас вводит в заблуждение). DoD-приоритет 3 (total_floors_house/elevators/concierge/closed_yard) — подтверждено by-design, НЕ пропуск: эти поля уже имеют канонический источник (`avito_houses.py` Stage 2c пишет их напрямую в `houses`, листинг линкуется через `house_url`); дублировать в `listings` намеренно не стали (избегаем two-sources-of-truth). Проверено: ruff чисто, 75 relevant tests + широкий scoped run (`avito`/`house_type`) 485 passed, полный backend suite 3206 passed (1 pre-existing unrelated failure, репродуцирован на чистом main тоже — не регрессия этого PR). code-reviewer APPROVE. **Known minor drift (не блокирует):** `tradein-mvp/packages/scraper-kit/` содержит отдельную копию `house_type_normalizer.py` — avito-вокабуляр добавлен только в app-level версию (scraper-kit пока не имеет avito_detail эквивалента, dormant migration track #2277).
lekss361 added 1 commit 2026-07-03 22:44:42 +00:00
fix(tradein/avito): консолидировать house_type normalizer + актуализировать docstring (#2009)
All checks were successful
CI / changes (pull_request) Successful in 8s
CI Trade-In / changes (pull_request) Successful in 8s
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 1m41s
520584ac7b
house_type + house_catalog_url уже сохранялись в save_detail_enrichment
(PR #2014, коммит 4a93a929) — исходный DoD-приоритет 1 уже был закрыт.
Оставшийся gap: avito_detail.py держал локальный дубль-мэппинг вместо
shared house_type_normalizer (#2007), созданного именно для переиспользования
между источниками. Перевёл на normalize_house_type(), добавил avito-вокабуляр
(русские лейблы) в общий _RAW_TO_CANON, починил 3 устаревших docstring
(всё ещё утверждали "собираются, но не сохраняются").
lekss361 merged commit e7f97f1355 into main 2026-07-03 22:47:06 +00:00
Sign in to join this conversation.
No reviewers
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#2340
No description provided.