perf(tradein): shared EKB seed price-brackets across avito/cian/yandex (city-dict ready for multi-city) #1760
No reviewers
Labels
No labels
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
Fable 5 ревью
feedback/max
generative
GG-форсайт
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
вторичка
ИРД
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#1760
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "perf/shared-price-brackets-cian-yandex"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Задача
Вынести EKB seed price-brackets (из #1759, avito) в ОБЩИЙ констант и применить ко ВСЕМ exhaustive-скрапперам — единообразие ≤2к-блоков + открытый верх + полнота на cian/yandex. Структура — city-dict, готова под per-city (multi-city: Москва пик 15-40М, Тюмень иные — см. vault
decisions/Decision_Price_Brackets_Per_City).Изменения
scrapers/price_brackets.py(нов) —get_price_seed_brackets(city='ekaterinburg')+CITY_PRICE_SEED_BRACKETScity-dict +_EKB_SECONDARY(11 брекетов, последний(250М, None)открытый).avito.py— локальный литерал заменён на_AVITO_PRICE_SEED_BRACKETS = get_price_seed_brackets()(тот же набор, loop без изменений). Поведение идентично — 23 avito-exhaustive теста зелёные без правок.cian.py—fetch_all_secondaryтеперь идёт по seed-сетке (вместо single-root[0,_MAX]);_walk_price_rangeполучилhi: int | None+ open-top guard; leaf-пагинация вынесена в_paginate_leaf_bucket(+_paginate_open_bucket).yandex_realty.py— exhaustivefetch_all_secondaryна seed-сетку;_walk_price_rangehi: int|None+ no-split open-path.Важно: yandex — применено к ПРАВИЛЬНОМУ пути
Премиса задачи (yandex использует
DEFAULT_PRICE_RANGESдля exhaustive) неверна. yandex exhaustive-путь был single-root бисекцией (как старый cian), БЕЗ seed-сетки.DEFAULT_PRICE_RANGESпитает отдельный gate-combofetch_around_multi_room(→scrape_pipelinecity-sweep, off-limits + city-sweep-тесты). Поэтому seed-сетка применена к yandex exhaustive (fetch_all_secondary), аDEFAULT_PRICE_RANGESнамеренно сохранён (его правка сломала бы city-sweep). Формат-адаптация тривиальна — yandex_build_url/_fetch_page_jsonуже принимаютprice_max: int|Noneи опускают priceMax при None.Тесты
Full suite: 2000 passed, 1 skipped, 0 failed. Новый
test_price_brackets.py; обновлёнtest_cian_exhaustive.py(+open-bracket); +2 yandex-теста. Ruff clean.Примечания ревью
yandex_realty.py(другое окно) — ожидаемо, разрулит owner WIP. Ветка с чистого main, yandex-тесты зелёные._MAX_PRICE/_AVITO_MAX_PRICE/_YANDEX_MAX_PRICEсохранены (ссылки в тестах/докстрингах).