Schedule stale gallery enrichment

This commit is contained in:
qananasikq
2026-08-18 10:40:26 +03:00
parent 19007dafc8
commit ca1fab1034
15 changed files with 460 additions and 82 deletions
+72
View File
@@ -217,6 +217,39 @@ class TestPersistenceServiceIntegration(unittest.TestCase):
self.assertEqual(car.body_type, "COUPE")
self.assertEqual([image.fullres_image for image in images], ["https://example.test/refreshed.jpg"])
def test_detail_timestamp_is_set_and_preserved_by_search_update(self) -> None:
search = self._record("mobile.de:detail-ts")
search.details_confirmed = False
search.images_confirmed = False
search.preserve_existing_details = True
self.persistence.upsert_car(search)
with self.persistence.session_scope() as session:
car = session.execute(select(Car).where(Car.origin_id == search.origin_id)).scalar_one()
self.assertIsNone(car.details_fetched_at)
detail = self._record("mobile.de:detail-ts", price=1500)
before = datetime.now(timezone.utc)
self.persistence.upsert_car(detail)
with self.persistence.session_scope() as session:
car = session.execute(select(Car).where(Car.origin_id == search.origin_id)).scalar_one()
fetched_at = self._as_utc(car.details_fetched_at)
self.assertIsNotNone(fetched_at)
self.assertGreaterEqual(fetched_at, before)
search_again = self._record("mobile.de:detail-ts", price=2000)
search_again.details_confirmed = False
search_again.images_confirmed = False
search_again.preserve_existing_details = True
self.persistence.upsert_car(search_again)
with self.persistence.session_scope() as session:
car = session.execute(select(Car).where(Car.origin_id == search.origin_id)).scalar_one()
self.assertEqual(self._as_utc(car.details_fetched_at), fetched_at)
def test_start_sync_run_marks_stale_running_runs_as_failed(self) -> None:
first_run_id = self.persistence.start_sync_run("lane-a")
second_run_id = self.persistence.start_sync_run("lane-b")
@@ -328,6 +361,45 @@ class TestPersistenceServiceIntegration(unittest.TestCase):
self.assertEqual([(origin_id, image_count) for _id, origin_id, _url, image_count in candidates], [("mobile.de:low", 1)])
def test_image_enrich_selector_prefers_unfetched_then_oldest_stale(self) -> None:
unfetched = self._record("mobile.de:unfetched")
unfetched.details_confirmed = False
stale_old = self._record("mobile.de:stale-old")
stale_new = self._record("mobile.de:stale-new")
fresh = self._record("mobile.de:fresh")
for record in (unfetched, stale_old, stale_new, fresh):
record.images = []
self.persistence.upsert_car(record)
now = datetime.now(timezone.utc)
with self.persistence.session_scope() as session:
cars = {
car.origin_id: car
for car in session.execute(select(Car)).scalars().all()
}
cars[stale_old.origin_id].details_fetched_at = now - timedelta(days=10)
cars[stale_new.origin_id].details_fetched_at = now - timedelta(days=8)
cars[fresh.origin_id].details_fetched_at = now - timedelta(days=1)
candidates = self.persistence.get_active_cars_batch_for_image_enrich(
limit=10,
max_existing_images=1,
stale_before=now - timedelta(days=7),
)
self.assertEqual(
[origin_id for _id, origin_id, _url, _count in candidates],
[unfetched.origin_id, stale_old.origin_id, stale_new.origin_id],
)
self.assertEqual(
self.persistence.get_active_cars_batch_for_image_enrich(
limit=0,
max_existing_images=1,
stale_before=now,
),
[],
)
if __name__ == "__main__":
unittest.main()