fix(scrapers): cian detail — извлечение kitchen_area_m2 (part of #1553) #1555

Merged
bot-backend merged 1 commit from fix/cian-kitchen-area into main 2026-06-16 11:42:36 +00:00
Owner

Проблема (#1553 cian-часть)

cian detail-парсер не извлекал площадь кухни: на проде kitchen_area_m2 = 0/15039 (колонка есть с миграции 011/019, не писалась). cian_detail.py доставал из offer JSON только windows/wcs/ceiling/repair, не kitchenArea.

Фикс

cian_detail.py — 4-местная разводка (как остальные detail-поля):

  • DetailEnrichment +kitchen_area_m2: float | None.
  • parse(): kitchen_area_m2=_parse_float(offer.get("kitchenArea")).
  • save_detail_enrichment UPDATE: kitchen_area_m2 = COALESCE(CAST(:ka AS double precision), kitchen_area_m2).

Имя поля kitchenArea подтверждено существующим кодом — тот же ключ в cian.py:723 (SERP) и test_cian_serp_scraper.py:77. Миграция не нужна (колонка есть). COALESCE не затирает существующее.

Проверки

  • uv run pytest (полный suite, оба CI-deselect): 1825 passed, 2 deselected.
  • ruff check + format: clean (строка лога 99 симв).
  • code-reviewer: ⚠️→ок (4-местность полная, psycopg v3 CAST, kitchenArea подтверждён).

Follow-up (не блокер, отдельно в #1553)

  • conflict_resolution.py:71 — добавить cian_detail в источники kitchen_area_m2 (сейчас ["cian_serp","avito_detail"]). Не регрессия (UPDATE COALESCE не идёт через conflict_resolution), но список источников устареет.
  • Post-deploy verify: SELECT count(*) FROM listings WHERE source='cian' AND kitchen_area_m2 IS NOT NULL должен расти после cian detail-энричмента.
## Проблема (#1553 cian-часть) cian detail-парсер не извлекал площадь кухни: на проде `kitchen_area_m2 = 0/15039` (колонка есть с миграции 011/019, не писалась). `cian_detail.py` доставал из `offer` JSON только windows/wcs/ceiling/repair, не `kitchenArea`. ## Фикс `cian_detail.py` — 4-местная разводка (как остальные detail-поля): - `DetailEnrichment` +`kitchen_area_m2: float | None`. - `parse()`: `kitchen_area_m2=_parse_float(offer.get("kitchenArea"))`. - `save_detail_enrichment` UPDATE: `kitchen_area_m2 = COALESCE(CAST(:ka AS double precision), kitchen_area_m2)`. Имя поля `kitchenArea` **подтверждено** существующим кодом — тот же ключ в `cian.py:723` (SERP) и `test_cian_serp_scraper.py:77`. Миграция не нужна (колонка есть). COALESCE не затирает существующее. ## Проверки - `uv run pytest` (полный suite, оба CI-deselect): **1825 passed, 2 deselected**. - `ruff check` + `format`: clean (строка лога 99 симв). - code-reviewer: ⚠️→ок (4-местность полная, psycopg v3 CAST, kitchenArea подтверждён). ## Follow-up (не блокер, отдельно в #1553) - `conflict_resolution.py:71` — добавить `cian_detail` в источники `kitchen_area_m2` (сейчас `["cian_serp","avito_detail"]`). Не регрессия (UPDATE COALESCE не идёт через conflict_resolution), но список источников устареет. - Post-deploy verify: `SELECT count(*) FROM listings WHERE source='cian' AND kitchen_area_m2 IS NOT NULL` должен расти после cian detail-энричмента.
lekss361 added 1 commit 2026-06-16 11:40:51 +00:00
fix(tradein): cian detail-парсер не извлекал kitchen_area_m2 из offer.kitchenArea
All checks were successful
CI / changes (push) Successful in 8s
CI / openapi-codegen-check (push) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / backend-tests (push) Has been skipped
CI / frontend-tests (push) Has been skipped
CI / changes (pull_request) Successful in 7s
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
b390c8334c
Добавлено поле kitchen_area_m2 в DetailEnrichment dataclass,
извлечение через _parse_float(offer.get("kitchenArea")) в fetch_detail,
и COALESCE(CAST(:ka AS double precision), kitchen_area_m2) в UPDATE listings
внутри save_detail_enrichment.

Имя поля kitchenArea — стандартное cian offer API (live-verify не делался,
прокси недоступен в dev-окружении).

Closes #1553
lekss361 added the
scope/backend
scrapers
labels 2026-06-16 11:40:58 +00:00
bot-backend merged commit f160ad3859 into main 2026-06-16 11:42:36 +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#1555
No description provided.