diff --git a/swh/web/common/origin_visits.py b/swh/web/common/origin_visits.py --- a/swh/web/common/origin_visits.py +++ b/swh/web/common/origin_visits.py @@ -55,7 +55,9 @@ origin_visits = [] per_page = archive.MAX_LIMIT - last_visit = None + if not cache_entry: + last_visit = None + while 1: visits = list( archive.lookup_origin_visits( @@ -77,6 +79,10 @@ origin_visits = sorted(origin_visits, key=lambda v: _visit_sort_key(v)) + if cache_entry: + # cache entry is already sorted with oldest visits + origin_visits = cache_entry + origin_visits + cache.set(cache_entry_id, origin_visits) return origin_visits diff --git a/swh/web/tests/common/test_origin_visits.py b/swh/web/tests/common/test_origin_visits.py --- a/swh/web/tests/common/test_origin_visits.py +++ b/swh/web/tests/common/test_origin_visits.py @@ -21,6 +21,9 @@ def test_get_origin_visits(mocker, snapshots): mock_archive = mocker.patch("swh.web.common.archive") mock_archive.MAX_LIMIT = 2 + # no cache + mock_cache = mocker.patch("swh.web.common.origin_visits.cache") + mock_cache.get.return_value = None def _lookup_origin_visits(*args, **kwargs): if kwargs["last_visit"] is None: @@ -61,6 +64,9 @@ assert len(origin_visits) == 3 + assert mock_archive.lookup_origin_visits.called + assert mock_cache.get.called + @given(new_snapshots(5)) def test_get_origin_visit(mocker, snapshots):