Merge pull request 'chore(tradein/proxy-pool): добавить domclick в provider_affinity CHECK (residential ASocks для #2000)' (#2426) from chore/tradein-scrape-proxies-domclick-affinity into main
All checks were successful
Deploy Trade-In / changes (push) Successful in 11s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-browser (push) Has been skipped
Deploy Trade-In / test (push) Successful in 43s
Deploy Trade-In / build-backend (push) Successful in 53s
Deploy Trade-In / deploy (push) Successful in 48s
All checks were successful
Deploy Trade-In / changes (push) Successful in 11s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-browser (push) Has been skipped
Deploy Trade-In / test (push) Successful in 43s
Deploy Trade-In / build-backend (push) Successful in 53s
Deploy Trade-In / deploy (push) Successful in 48s
This commit is contained in:
commit
b102c334d8
2 changed files with 54 additions and 1 deletions
|
|
@ -2465,7 +2465,7 @@ def get_data_quality(
|
||||||
# АДДИТИВНО: ручки лишь наполняют/читают scrape_proxies. Подключение пула к
|
# АДДИТИВНО: ручки лишь наполняют/читают scrape_proxies. Подключение пула к
|
||||||
# боевому сбору (pick/lease/rotate вместо env) — отдельные шаги P3/P4.
|
# боевому сбору (pick/lease/rotate вместо env) — отдельные шаги P3/P4.
|
||||||
|
|
||||||
_PROXY_AFFINITIES = frozenset({"avito", "cian", "yandex", "generic", "any"})
|
_PROXY_AFFINITIES = frozenset({"avito", "cian", "yandex", "domclick", "generic", "any"})
|
||||||
_PROXY_KINDS = frozenset({"http", "socks5"})
|
_PROXY_KINDS = frozenset({"http", "socks5"})
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,53 @@
|
||||||
|
-- 173_scrape_proxies_add_domclick_affinity.sql
|
||||||
|
-- Расширение CHECK-констрейнта scrape_proxies.provider_affinity значением 'domclick' (#2000).
|
||||||
|
--
|
||||||
|
-- WHY:
|
||||||
|
-- DomClick-скрейпинг карточек (scraper_kit/providers/domclick/serp.py:327,
|
||||||
|
-- build_browser_fetcher(config, "domclick") -> proxy_provider.acquire("domclick"))
|
||||||
|
-- сейчас попадает в общий пул affinity='any' вместе с мобильными прокси, которые
|
||||||
|
-- QRATOR банит 403. Есть выделенный residential ASocks-прокси (прод
|
||||||
|
-- scrape_proxies.id=1) с чистой репутацией IP — живой аудит подтвердил, что QRATOR
|
||||||
|
-- пропускает чистые residential IP. Хотим закрепить его строго за DomClick через
|
||||||
|
-- provider_affinity='domclick', а не 'any'.
|
||||||
|
--
|
||||||
|
-- WHAT:
|
||||||
|
-- DROP + ADD CHECK constraint scrape_proxies_provider_affinity_check с добавленным
|
||||||
|
-- значением 'domclick' (нельзя ALTER CHECK в Postgres без пересоздания).
|
||||||
|
-- Реальное имя констрейнта подтверждено в проде через pg_constraint:
|
||||||
|
-- conname = scrape_proxies_provider_affinity_check
|
||||||
|
-- CHECK ((provider_affinity = ANY (ARRAY['avito','cian','yandex','generic','any'])))
|
||||||
|
--
|
||||||
|
-- SCOPE:
|
||||||
|
-- Только схема (CHECK). Данные НЕ трогаем — UPDATE scrape_proxies SET
|
||||||
|
-- provider_affinity='domclick' WHERE id=1 применяется отдельно, ПОСЛЕ этой миграции
|
||||||
|
-- (constraint должен допускать значение раньше, чем строка его получит).
|
||||||
|
-- Backend-уровень (Pydantic whitelist _PROXY_AFFINITIES в admin.py) обновлён в этом
|
||||||
|
-- же PR — держим в синхроне со схемой.
|
||||||
|
--
|
||||||
|
-- IDEMPOTENCY / SAFETY:
|
||||||
|
-- - BEGIN/COMMIT — атомарно.
|
||||||
|
-- - DROP CONSTRAINT IF EXISTS — безопасно, если констрейнт уже пересоздан/переименован.
|
||||||
|
-- - ADD CONSTRAINT без IF NOT EXISTS (Postgres такого синтаксиса не имеет для
|
||||||
|
-- constraints) — обёрнуто в DO $$ ... EXCEPTION WHEN duplicate_object THEN NULL,
|
||||||
|
-- чтобы повторный прогон (после DROP IF EXISTS не сработавшего, т.к. кто-то уже
|
||||||
|
-- добавил новый constraint с тем же именем) не падал auto-apply на деплое.
|
||||||
|
--
|
||||||
|
-- Dependencies: 157_scrape_proxies.sql
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
ALTER TABLE scrape_proxies
|
||||||
|
DROP CONSTRAINT IF EXISTS scrape_proxies_provider_affinity_check;
|
||||||
|
|
||||||
|
DO $$
|
||||||
|
BEGIN
|
||||||
|
ALTER TABLE scrape_proxies
|
||||||
|
ADD CONSTRAINT scrape_proxies_provider_affinity_check
|
||||||
|
CHECK (provider_affinity IN
|
||||||
|
('avito', 'cian', 'yandex', 'domclick', 'generic', 'any'));
|
||||||
|
EXCEPTION
|
||||||
|
WHEN duplicate_object THEN
|
||||||
|
NULL; -- констрейнт с таким именем уже существует (повторный прогон) — no-op
|
||||||
|
END $$;
|
||||||
|
|
||||||
|
COMMIT;
|
||||||
Loading…
Add table
Reference in a new issue