"""Общие seed price-brackets для exhaustive-скрапперов (avito/cian/yandex). EKB-настроенные (анализ прод-распределения вторички ЕКБ). Структура city-dict — готова под per-city (multi-city: Москва пик 15-40М, Тюмень — иные; multi-city — отдельная фича, см. vault decision). Сейчас единственный город — ekaterinburg. """ # (lo, hi) рубли; hi=None — открытый верхний брекет (без потолка). Закрытые # брекеты соприкасаются — вызывающий применяет hi-1 (эксклюзивный верх), дедуп # по source_id страхует на стыках. _EKB_SECONDARY: list[tuple[int, int | None]] = [ (0, 4_000_000), (4_000_000, 5_000_000), (5_000_000, 6_000_000), (6_000_000, 7_000_000), (7_000_000, 8_000_000), (8_000_000, 10_000_000), (10_000_000, 13_000_000), (13_000_000, 17_000_000), (17_000_000, 25_000_000), (25_000_000, 250_000_000), (250_000_000, None), # 250М+ открытый catch-all (без потолка) ] CITY_PRICE_SEED_BRACKETS: dict[str, list[tuple[int, int | None]]] = { "ekaterinburg": _EKB_SECONDARY, } def get_price_seed_brackets(city: str = "ekaterinburg") -> list[tuple[int, int | None]]: """Seed price-brackets для города (fallback на ekaterinburg).""" return CITY_PRICE_SEED_BRACKETS.get(city, _EKB_SECONDARY)