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

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

Без этого московский обход нельзя завести конфигом: pipeline.py уже принимает region_code в каждой функции run_*, а планировщик его не читал ни разу — в файле не было ни одного вхождения этой строки, поэтому любой свип писал listings.region_code = 66.

Регион берётся из scrape_schedules.default_params во всех восьми job-обработчиках, которые зовут run_* с этим параметром. Значение валидируется: не число или код вне известного списка — явный отказ до вызова обхода, а не тихая запись мусора в листинги.

Кит намеренно не импортирует app.* (это гейтит отдельный тест), поэтому список допустимых кодов задан локально с комментарием о ручной синхронизации с реестром регионов.

Отсутствие ключа в параметрах даёт ровно прежнее поведение — 66. Ни у одной из 123 существующих строк расписания этого ключа нет, поведение закреплено юнит-тестом и тремя интеграционными на разные площадки.

Строки расписаний под Москву, миграции и геоскоупы площадок сюда намеренно не входят — следующий шаг.

🤖 Generated with Claude Code

https://claude.ai/code/session_01NQb6WeJtagZwZnUsSjDizs

Без этого московский обход нельзя завести конфигом: `pipeline.py` уже принимает `region_code` в каждой функции `run_*`, а планировщик его не читал ни разу — в файле не было ни одного вхождения этой строки, поэтому любой свип писал `listings.region_code = 66`. Регион берётся из `scrape_schedules.default_params` во всех восьми job-обработчиках, которые зовут `run_*` с этим параметром. Значение валидируется: не число или код вне известного списка — явный отказ до вызова обхода, а не тихая запись мусора в листинги. Кит намеренно не импортирует `app.*` (это гейтит отдельный тест), поэтому список допустимых кодов задан локально с комментарием о ручной синхронизации с реестром регионов. Отсутствие ключа в параметрах даёт ровно прежнее поведение — 66. Ни у одной из 123 существующих строк расписания этого ключа нет, поведение закреплено юнит-тестом и тремя интеграционными на разные площадки. Строки расписаний под Москву, миграции и геоскоупы площадок сюда намеренно не входят — следующий шаг. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01NQb6WeJtagZwZnUsSjDizs
lekss361 added 1 commit 2026-09-13 10:43:58 +00:00
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
9eb10a0f81
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).
bot-backend added 1 commit 2026-09-13 11:06:34 +00:00
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
d7f46316e3
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).
lekss361 merged commit 811b9ecc8f into main 2026-09-13 11:45:58 +00:00
lekss361 deleted branch feat/kit-scheduler-region-param 2026-09-13 11:45:58 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
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#3515
No description provided.