fixup(scrapers): bind SCRAPER_PROXY_URL via validation_alias + env-binding test (#806)
This commit is contained in:
parent
e5f4e37415
commit
d815d7ba83
2 changed files with 44 additions and 1 deletions
|
|
@ -1,5 +1,6 @@
|
|||
"""Минимальный settings для standalone trade-in MVP."""
|
||||
|
||||
from pydantic import Field
|
||||
from pydantic_settings import BaseSettings, SettingsConfigDict
|
||||
|
||||
|
||||
|
|
@ -142,7 +143,9 @@ class Settings(BaseSettings):
|
|||
# 2. AVITO_PROXY_URL — legacy ENV; fallback, чтобы prod-серверы с уже
|
||||
# настроенным AVITO_PROXY_URL работали без изменений .env.runtime (#806).
|
||||
# property `scraper_proxy_url` реализует эту логику; используй его везде.
|
||||
scraper_proxy_url_env: str | None = None # ENV: SCRAPER_PROXY_URL (новый общий)
|
||||
# validation_alias привязывает поле к env SCRAPER_PROXY_URL (без него
|
||||
# pydantic-settings читал бы SCRAPER_PROXY_URL_ENV по имени поля — #806 fixup).
|
||||
scraper_proxy_url_env: str | None = Field(default=None, validation_alias="SCRAPER_PROXY_URL")
|
||||
avito_proxy_url: str | None = None # ENV: AVITO_PROXY_URL (legacy fallback)
|
||||
|
||||
@property
|
||||
|
|
|
|||
|
|
@ -100,3 +100,43 @@ def test_avito_proxies_fallback_via_avito_proxy_url():
|
|||
result = _avito_proxies()
|
||||
|
||||
assert result == {"http": avito_url, "https": avito_url}
|
||||
|
||||
|
||||
# ── Real pydantic env-binding (regression for #806 fixup) ─────────────────────
|
||||
# The inline-replica tests above prove the OR-logic but NOT that the field
|
||||
# actually binds to env SCRAPER_PROXY_URL. `validation_alias` is what makes that
|
||||
# work — without it pydantic-settings reads SCRAPER_PROXY_URL_ENV (the field
|
||||
# name), so setting SCRAPER_PROXY_URL would be a silent no-op. These tests
|
||||
# construct a real Settings and assert end-to-end env binding.
|
||||
|
||||
|
||||
def _fresh_settings():
|
||||
from app.core.config import Settings
|
||||
|
||||
return Settings(_env_file=None)
|
||||
|
||||
|
||||
def test_settings_binds_scraper_proxy_url_env(monkeypatch):
|
||||
monkeypatch.setenv("SCRAPER_PROXY_URL", "http://scraper-proxy:1234")
|
||||
monkeypatch.delenv("AVITO_PROXY_URL", raising=False)
|
||||
assert _fresh_settings().scraper_proxy_url == "http://scraper-proxy:1234"
|
||||
|
||||
|
||||
def test_settings_scraper_env_overrides_avito(monkeypatch):
|
||||
monkeypatch.setenv("SCRAPER_PROXY_URL", "http://scraper-proxy:1234")
|
||||
monkeypatch.setenv("AVITO_PROXY_URL", "http://avito-proxy:5678")
|
||||
assert _fresh_settings().scraper_proxy_url == "http://scraper-proxy:1234"
|
||||
|
||||
|
||||
def test_settings_falls_back_to_avito_env(monkeypatch):
|
||||
monkeypatch.delenv("SCRAPER_PROXY_URL", raising=False)
|
||||
monkeypatch.setenv("AVITO_PROXY_URL", "http://avito-proxy:5678")
|
||||
assert _fresh_settings().scraper_proxy_url == "http://avito-proxy:5678"
|
||||
|
||||
|
||||
def test_settings_ignores_misnamed_scraper_proxy_url_env(monkeypatch):
|
||||
"""Regression: the old wrong env name SCRAPER_PROXY_URL_ENV must NOT bind."""
|
||||
monkeypatch.delenv("SCRAPER_PROXY_URL", raising=False)
|
||||
monkeypatch.delenv("AVITO_PROXY_URL", raising=False)
|
||||
monkeypatch.setenv("SCRAPER_PROXY_URL_ENV", "http://wrong-name:1111")
|
||||
assert _fresh_settings().scraper_proxy_url is None
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue