scrapers K: fix _unix_to_date TZ-inconsistency (3 копии MSK/UTC/naive) #2129

Closed
opened 2026-07-02 13:39:59 +00:00 by lekss361 · 0 comments
Owner

Часть Epic #2126, шаг K (баг-фикс, независимо — можно стартовать сразу, in-place до переноса в пакет).

Bug

_unix_to_date реализован 3 раза с РАЗНЫМИ timezone → один и тот же epoch от Avito даёт разные даты:

  • avito.py:214 — MSK
  • avito_houses.py:247 — UTC
  • avito_imv.py:203 — naive/local

Даты публикации/истории размещения расходятся между SERP, houses и IMV для одного объекта.

Goal

Одна реализация с явным, корректным TZ (Avito отдаёт epoch-ms в UTC, отображение — МСК; согласовать с тем, как БД хранит даты — см. остальной scrape-код). Заменить 3 копии. Заодно свести RUS_MONTHS (×3) в один модуль.

Files

  • tradein-mvp/backend/app/services/scrapers/avito.py, avito_houses.py, avito_imv.py
  • новый общий хелпер (напр. avito_shared.py) ИЛИ в существующий, если логичнее

Acceptance

  • Одна функция (grep подтверждает: нет дубля _unix_to_date)
  • Юнит-тест: один epoch → одинаковая дата во всех трёх путях
  • Определить правильный TZ и обосновать в комментарии

Risk

Смена TZ меняет уже сохранённые даты в БД — проверить какое значение КОРРЕКТНО (не просто «свести к одному»), сверить с форматом хранения дат в listings/houses.

Agent: backend-engineer

Часть Epic #2126, шаг K (баг-фикс, **независимо — можно стартовать сразу**, in-place до переноса в пакет). ## Bug `_unix_to_date` реализован 3 раза с РАЗНЫМИ timezone → один и тот же epoch от Avito даёт разные даты: - `avito.py:214` — MSK - `avito_houses.py:247` — UTC - `avito_imv.py:203` — naive/local Даты публикации/истории размещения расходятся между SERP, houses и IMV для одного объекта. ## Goal Одна реализация с явным, корректным TZ (Avito отдаёт epoch-ms в UTC, отображение — МСК; согласовать с тем, как БД хранит даты — см. остальной scrape-код). Заменить 3 копии. Заодно свести `RUS_MONTHS` (×3) в один модуль. ## Files - `tradein-mvp/backend/app/services/scrapers/avito.py`, `avito_houses.py`, `avito_imv.py` - новый общий хелпер (напр. `avito_shared.py`) ИЛИ в существующий, если логичнее ## Acceptance - Одна функция (grep подтверждает: нет дубля `_unix_to_date`) - Юнит-тест: один epoch → одинаковая дата во всех трёх путях - Определить правильный TZ и обосновать в комментарии ## Risk Смена TZ меняет уже сохранённые даты в БД — проверить какое значение КОРРЕКТНО (не просто «свести к одному»), сверить с форматом хранения дат в listings/houses. **Agent:** backend-engineer
lekss361 added the
bug
priority/p1
scope/backend
scrapers
status/ready
tradein
labels 2026-07-02 13:41:50 +00:00
lekss361 added
status/qa
and removed
status/ready
labels 2026-07-02 14:04:00 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#2129
No description provided.