diff --git a/tradein-mvp/backend/app/core/config.py b/tradein-mvp/backend/app/core/config.py index af4081b8..64a9022f 100644 --- a/tradein-mvp/backend/app/core/config.py +++ b/tradein-mvp/backend/app/core/config.py @@ -886,21 +886,17 @@ class Settings(BaseSettings): """ return self.scraper_proxy_url_env - # ── Ban-recovery budget knobs (changeip-механизм снят #2616 шаг 2) ──────── - # Раньше эти поля тюнили retry/settle для GET-changeip mobileproxy - # (AVITO_PROXY_ROTATE_URL и т.д., см. историю выше) — сама ссылка удалена - # (закрытый аккаунт), поэтому IP-ротация сейчас всегда no-op (_rotate_ip / - # _rotate_proxy_ip возвращают False без сетевого похода). Поля оставлены: - # `*_proxy_max_rotations` продолжают гейтить бюджет попыток в ban-rotation - # state machine (scraper_kit.orchestration.pipeline._try_rotate_within_budget) - # — те же 0 попыток "успеха", что и раньше при мёртвом changeip, просто без - # затрат на HTTP; `avito_proxy_rotate_settle_s` — верхняя граница - # asyncio.wait_for в app.tasks.avito_detail_backfill (страховка от зависания). - # Живая ротация IP — ASOCKS_API_TOKEN / app.services.proxy_rotation (#2611). + # ── Ban-recovery budget knobs (changeip снят #2616 шаг 2) ──────────────── + # Живая ротация IP — ASOCKS_API_TOKEN / app.services.proxy_rotation (#2611); + # `_rotate_ip`/`_rotate_proxy_ip` остались no-op после удаления changeip-ссылки. + # Обе ручки читаются: `*_proxy_max_rotations` гейтит бюджет попыток в + # ban-rotation (scraper_kit.orchestration.pipeline._max_rotations), + # `avito_proxy_rotate_settle_s` — верхняя граница asyncio.wait_for в + # app.tasks.avito_detail_backfill. + # #3212: proxy_rotate_attempts / proxy_rotate_attempt_timeout_s удалены — + # ретраи changeip-GET, которых больше нет; ни одного читателя не осталось. avito_proxy_max_rotations: int = 4 avito_proxy_rotate_settle_s: float = 9.0 - proxy_rotate_attempt_timeout_s: float = 8.0 - proxy_rotate_attempts: int = 3 # ── ASocks pool-proxy rotation (#2600) ─────────────────────────────────── # Bearer-токен веб-кабинета ASocks для POST .../unlimited-proxy/{portId}/refresh-ip diff --git a/tradein-mvp/backend/app/services/scraper_adapters.py b/tradein-mvp/backend/app/services/scraper_adapters.py index 837da32f..44bb627c 100644 --- a/tradein-mvp/backend/app/services/scraper_adapters.py +++ b/tradein-mvp/backend/app/services/scraper_adapters.py @@ -175,14 +175,6 @@ class RealScraperConfig: def avito_proxy_rotate_settle_s(self) -> float: return _settings.avito_proxy_rotate_settle_s - @property - def proxy_rotate_attempts(self) -> int: - return _settings.proxy_rotate_attempts - - @property - def proxy_rotate_attempt_timeout_s(self) -> float: - return _settings.proxy_rotate_attempt_timeout_s - @property def cian_proxy_max_rotations(self) -> int: return _settings.cian_proxy_max_rotations diff --git a/tradein-mvp/backend/tests/test_2686_ban_kind_split.py b/tradein-mvp/backend/tests/test_2686_ban_kind_split.py index 53492581..90c52bb9 100644 --- a/tradein-mvp/backend/tests/test_2686_ban_kind_split.py +++ b/tradein-mvp/backend/tests/test_2686_ban_kind_split.py @@ -155,8 +155,6 @@ def _config() -> SimpleNamespace: avito_proxy_max_rotations=0, avito_serp_ok_not_banned=True, avito_proxy_rotate_settle_s=0.0, - proxy_rotate_attempts=1, - proxy_rotate_attempt_timeout_s=1.0, avito_full_load_price_cap=1400, avito_full_load_max_pages=100, avito_full_load_concurrency=1, diff --git a/tradein-mvp/backend/tests/test_2687_pool_exhaustion_keeps_checkpoint.py b/tradein-mvp/backend/tests/test_2687_pool_exhaustion_keeps_checkpoint.py index 6dd54899..e6a897b1 100644 --- a/tradein-mvp/backend/tests/test_2687_pool_exhaustion_keeps_checkpoint.py +++ b/tradein-mvp/backend/tests/test_2687_pool_exhaustion_keeps_checkpoint.py @@ -99,8 +99,6 @@ def _config() -> SimpleNamespace: avito_proxy_max_rotations=0, avito_serp_ok_not_banned=True, avito_proxy_rotate_settle_s=0.0, - proxy_rotate_attempts=1, - proxy_rotate_attempt_timeout_s=1.0, cian_proxy_max_rotations=0, yandex_proxy_max_rotations=0, cian_full_load_per_fetch_timeout_s=0.0, diff --git a/tradein-mvp/backend/tests/test_930_scheduler_resume_checkpoint.py b/tradein-mvp/backend/tests/test_930_scheduler_resume_checkpoint.py index cc0ba37a..060ecd0b 100644 --- a/tradein-mvp/backend/tests/test_930_scheduler_resume_checkpoint.py +++ b/tradein-mvp/backend/tests/test_930_scheduler_resume_checkpoint.py @@ -195,8 +195,6 @@ def _serp_config() -> SimpleNamespace: avito_proxy_max_rotations=0, avito_serp_ok_not_banned=True, avito_proxy_rotate_settle_s=0.0, - proxy_rotate_attempts=1, - proxy_rotate_attempt_timeout_s=1.0, scraper_skip_seen_today=False, ) diff --git a/tradein-mvp/backend/tests/test_scraper_kit_pipeline_parity.py b/tradein-mvp/backend/tests/test_scraper_kit_pipeline_parity.py index f3091685..8d3f9154 100644 --- a/tradein-mvp/backend/tests/test_scraper_kit_pipeline_parity.py +++ b/tradein-mvp/backend/tests/test_scraper_kit_pipeline_parity.py @@ -128,8 +128,6 @@ class _Scenario: avito_proxy_max_rotations=self.avito_proxy_max_rotations, avito_serp_ok_not_banned=self.avito_serp_ok_not_banned, avito_proxy_rotate_settle_s=0.0, - proxy_rotate_attempts=1, - proxy_rotate_attempt_timeout_s=1.0, cian_proxy_max_rotations=0, yandex_proxy_max_rotations=0, scraper_skip_seen_today=False, diff --git a/tradein-mvp/packages/scraper-kit/src/scraper_kit/contracts.py b/tradein-mvp/packages/scraper-kit/src/scraper_kit/contracts.py index 16f50bea..4b127fac 100644 --- a/tradein-mvp/packages/scraper-kit/src/scraper_kit/contracts.py +++ b/tradein-mvp/packages/scraper-kit/src/scraper_kit/contracts.py @@ -157,12 +157,6 @@ class ScraperConfig(Protocol): avito_serp_ok_not_banned: bool # changeip settle-пауза (секунды) после ротации IP. avito_proxy_rotate_settle_s: float - # Ретраи changeip-GET: N попыток по proxy_rotate_attempt_timeout_s каждая (#1950). - # changeip-ссылка снята (#2616 шаг 2) — эти два поля сейчас не читаются - # ban-rotation кодом (см. avito_proxy_max_rotations выше), оставлены как - # budget-верхняя-граница для app.tasks.avito_detail_backfill wait_for. - proxy_rotate_attempts: int - proxy_rotate_attempt_timeout_s: float # Cian лимит ротаций (rotate_url снят #2616 шаг 2, см. avito_proxy_max_rotations). cian_proxy_max_rotations: int # Yandex лимит ротаций (аналогично).