Some checks failed
Deploy Trade-In / test (push) Blocked by required conditions
Deploy Trade-In / build-backend (push) Blocked by required conditions
Deploy Trade-In / build-frontend (push) Blocked by required conditions
Deploy Trade-In / build-browser (push) Blocked by required conditions
Deploy Trade-In / deploy (push) Blocked by required conditions
Deploy Trade-In / changes (push) Has been cancelled
60 lines
2.1 KiB
Python
60 lines
2.1 KiB
Python
"""LOW audit R2 (#6) — `_clamp_plausible_date` в `scraper_kit.base`.
|
||
|
||
Choke point для `listing_date`/`publish_date` в `save_listings()` (единый для
|
||
avito/cian/yandex/domclick). Проверено в БД: avito пишет 1970-01-01
|
||
(epoch-sentinel, ~698 строк) и даты до +11 дней в будущем (~79 строк); у
|
||
yandex — единичные аномально старые годы. Правдоподобный диапазон —
|
||
[2010-01-01, today+2d]; всё остальное → None (колонка nullable).
|
||
|
||
Офлайн: без сети/curl_cffi/БД, только импорт + чистая функция.
|
||
"""
|
||
|
||
from __future__ import annotations
|
||
|
||
import os
|
||
from datetime import date, timedelta
|
||
|
||
os.environ.setdefault("DATABASE_URL", "postgresql+psycopg://test:test@localhost/test_db")
|
||
|
||
from scraper_kit.base import _clamp_plausible_date
|
||
|
||
|
||
def test_avito_epoch_sentinel_rejected() -> None:
|
||
"""1970-01-01 — классический Avito 0-epoch sentinel."""
|
||
assert _clamp_plausible_date(date(1970, 1, 1)) is None
|
||
|
||
|
||
def test_just_before_min_plausible_rejected() -> None:
|
||
assert _clamp_plausible_date(date(2009, 12, 31)) is None
|
||
|
||
|
||
def test_far_future_rejected() -> None:
|
||
assert _clamp_plausible_date(date(2099, 1, 1)) is None
|
||
|
||
|
||
def test_none_passes_through_as_none() -> None:
|
||
assert _clamp_plausible_date(None) is None
|
||
|
||
|
||
def test_normal_recent_date_passes_through() -> None:
|
||
d = date(2024, 6, 1)
|
||
assert _clamp_plausible_date(d) == d
|
||
|
||
|
||
def test_today_passes() -> None:
|
||
today = date.today()
|
||
assert _clamp_plausible_date(today) == today
|
||
|
||
|
||
def test_today_plus_one_day_passes() -> None:
|
||
d = date.today() + timedelta(days=1)
|
||
assert _clamp_plausible_date(d) == d
|
||
|
||
|
||
def test_today_plus_three_days_rejected() -> None:
|
||
assert _clamp_plausible_date(date.today() + timedelta(days=3)) is None
|
||
|
||
|
||
def test_min_plausible_boundary_passes() -> None:
|
||
"""2010-01-01 сам по себе — граница включительно (в окне)."""
|
||
assert _clamp_plausible_date(date(2010, 1, 1)) == date(2010, 1, 1)
|