diff --git a/swh/web/browse/urls.py b/swh/web/browse/urls.py --- a/swh/web/browse/urls.py +++ b/swh/web/browse/urls.py @@ -16,7 +16,7 @@ import swh.web.browse.views.release # noqa import swh.web.browse.views.revision # noqa import swh.web.browse.views.snapshot # noqa -from swh.web.utils import origin_visit_types, reverse +from swh.web.utils import is_swh_web_production, origin_visit_types, reverse def _browse_help_view(request: HttpRequest) -> HttpResponse: @@ -31,7 +31,7 @@ "browse-search.html", { "heading": "Search software origins to browse", - "visit_types": origin_visit_types(), + "visit_types": origin_visit_types(use_cache=is_swh_web_production(request)), }, ) diff --git a/swh/web/utils/__init__.py b/swh/web/utils/__init__.py --- a/swh/web/utils/__init__.py +++ b/swh/web/utils/__init__.py @@ -497,16 +497,25 @@ _origin_visit_types_cache_timeout = 24 * 60 * 60 # 24 hours -@django_cache( - timeout=_origin_visit_types_cache_timeout, - catch_exception=True, - exception_return_value=[], -) -def origin_visit_types() -> List[str]: +def origin_visit_types(use_cache: bool = True) -> List[str]: """Return the exhaustive list of visit types for origins ingested into the archive. + + Args: + use_cache: if :const:`True`, store visit types in django + cache for 24 hours. """ - return sorted(search().visit_types_count().keys()) + + @django_cache( + timeout=_origin_visit_types_cache_timeout, + catch_exception=True, + exception_return_value=[], + invalidate_cache_pred=lambda val: not use_cache, + ) + def _origin_visit_types_internal() -> List[str]: + return sorted(search().visit_types_count().keys()) + + return _origin_visit_types_internal() def redirect_to_new_route(request, new_route, permanent=True): diff --git a/swh/web/webapp/urls.py b/swh/web/webapp/urls.py --- a/swh/web/webapp/urls.py +++ b/swh/web/webapp/urls.py @@ -16,7 +16,7 @@ from django.views.generic.base import RedirectView from swh.web.config import get_config -from swh.web.utils import archive, origin_visit_types +from swh.web.utils import archive, is_swh_web_production, origin_visit_types from swh.web.utils.exc import sentry_capture_exception swh_web_config = get_config() @@ -29,7 +29,11 @@ def default_view(request): - return render(request, "homepage.html", {"visit_types": origin_visit_types()}) + return render( + request, + "homepage.html", + {"visit_types": origin_visit_types(use_cache=is_swh_web_production(request))}, + ) def stat_counters(request):