From 9898becb962d4cb075262f3693d69c0762120a15 Mon Sep 17 00:00:00 2001 From: J-E Castagnede Date: Thu, 1 Dec 2022 16:00:36 +0100 Subject: [PATCH 1/2] fix cache management --- VERSION | 2 +- docs/changelog.rst | 4 ++++ geotrek/settings/base.py | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 5346e1672a..632717ba48 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.92.1 \ No newline at end of file +2.92.1+dev \ No newline at end of file diff --git a/docs/changelog.rst b/docs/changelog.rst index 55c843bcb8..46834ff55e 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -5,6 +5,10 @@ CHANGELOG 2.92.1+dev (XXXX-XX-XX) ----------------------- +**Bug fixes** + +- Fix cache management in API v2 + 2.92.1 (2022-12-01) ----------------------- diff --git a/geotrek/settings/base.py b/geotrek/settings/base.py index cb553ead9d..ddfcb75e16 100644 --- a/geotrek/settings/base.py +++ b/geotrek/settings/base.py @@ -856,6 +856,7 @@ def api_bbox(bbox, buffer): LEAFLET_CONFIG['SPATIAL_EXTENT'] = api_bbox(SPATIAL_EXTENT, VIEWPORT_MARGIN) REST_FRAMEWORK_EXTENSIONS = { + 'DEFAULT_USE_CACHE': 'api_v2', 'DEFAULT_CACHE_ERRORS': False } From 044f0664cfc4e6df685e6cc6bdae508c2be19e89 Mon Sep 17 00:00:00 2001 From: J-E Castagnede Date: Thu, 1 Dec 2022 16:49:02 +0100 Subject: [PATCH 2/2] doesnt raise exception if not exists --- geotrek/api/v2/viewsets.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/geotrek/api/v2/viewsets.py b/geotrek/api/v2/viewsets.py index 93e1c25cc2..7f897a347a 100644 --- a/geotrek/api/v2/viewsets.py +++ b/geotrek/api/v2/viewsets.py @@ -5,6 +5,7 @@ from mapentity.renderers import GeoJSONRenderer from rest_framework import viewsets, renderers from rest_framework.authentication import BasicAuthentication, SessionAuthentication +from rest_framework.generics import get_object_or_404 from rest_framework.permissions import IsAuthenticatedOrReadOnly, IsAuthenticated from geotrek.api.v2 import pagination as api_pagination, filters as api_filters @@ -37,7 +38,9 @@ def get_base_cache_string(self): def get_object_cache_key(self, pk): """ return specific object cache key based on object date_update column""" # don't directly use get_object or get_queryset to avoid select / prefetch and annotation sql queries - date_update = self.get_queryset().model.objects.get(pk=pk).date_update + # insure object exists and doesn't raise exception + instance = get_object_or_404(self.get_queryset().model, pk=pk) + date_update = instance.date_update return f"{self.get_base_cache_string()}:{date_update.isoformat()}" def object_cache_key_func(self, **kwargs):