Планировщик кита передаёт регион из строки расписания в обход #3515

Merged
lekss361 merged 2 commits from feat/kit-scheduler-region-param into main 2026-09-13 11:45:58 +00:00

2 commits

Author SHA1 Message Date
bot-backend
d7f46316e3 fix(tradein-scraper-kit): продуктовый override domclick тоже получает region_code
All checks were successful
CI Trade-In / backend-tests (pull_request) Successful in 4m58s
CI Trade-In / changes (pull_request) Successful in 10s
CI / changes (pull_request) Successful in 13s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
app/services/product_handlers.py::_job_domclick_city_sweep — app-side override
kit-native джобы (issue 3264, инъекция куки Sber ID для обхода QRATOR PoW).
Домклик по расписанию идёт именно через этот override, а не через kit-native
_job_domclick_city_sweep напрямую (build_registry отдаёт последнее слово
продукту) — предыдущий коммит добавил region_code только в kit-джобу, оставив
override с прежним поведением. CI поймал дрейф штатным тестом
test_product_override_matches_kit_native_call_except_cookies: он сравнивает
kwargs обеих джоб и требует расхождения ровно в cookies.

Валидацию не дублирую — импортирую _resolve_region_code из scraper_kit.
orchestration.scheduler (как уже сделано для _pick_resume/_defer_next_run_at
в этом же файле), чтобы список разрешённых регионов остался в одном месте.

Другие дубли джоб в product_handlers.py, зовущие run_*_sweep/run_*_full_load,
не найдены (grep по обоим паттернам — только domclick).
2026-09-13 14:06:26 +03:00
bot-backend
9eb10a0f81 feat(tradein-scraper-kit): планировщик прокидывает region_code из default_params
Some checks failed
CI Trade-In / backend-tests (pull_request) Failing after 5m45s
CI Trade-In / changes (pull_request) Successful in 13s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 17s
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
pipeline.py уже принимал region_code параметром в каждой run_*-функции, но
scheduler.py его ни разу не читал из scrape_schedules.default_params — все
8 job-обработчиков, вызывающих run_*, звали их с дефолтным DEFAULT_REGION_CODE
(66), независимо от того, что лежит в строке расписания. Это была единственная
причина, по которой московский обход нельзя было завести конфигом: нижний слой
готов, а верхний молча игнорировал параметр.

Добавлен _resolve_region_code(params): читает params["region_code"] (дефолт —
DEFAULT_REGION_CODE, импортированный из pipeline.py, а не второй литерал 66),
приводит к int и валидирует по _KNOWN_REGION_CODES. Kit намеренно не
импортирует app.* (contracts.py, strangler-граница), поэтому реестр
app.services.regions.REGIONS сюда не дотянуть напрямую — _KNOWN_REGION_CODES
суженная копия его ключей с явным комментарием синхронизации. Неизвестный
region_code роняет job ValueError'ом ДО вызова run_* (тот же путь, что и любой
другой crash хендлера — `_dispatch`'s `except Exception` → `logger.exception`),
а не тихо пишет мусор в listings.region_code.

Отсутствие ключа даёт ровно прежнее поведение (66) — проверено тестами и
прогоном полного набора scheduler-тестов кита (70 passed, 0 failed).
2026-09-13 13:34:13 +03:00