Skip to content

Commit 5e630d0

Browse files
fix: Add tests to verify caching behavior (#85)
* fix: Add tests to verify caching behavior * remove leftover, unused code * Apply suggestions from code review Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com> * add @preview_schema to MenuView * remove empty file --------- Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>
1 parent ad64f80 commit 5e630d0

File tree

5 files changed

+468
-19
lines changed

5 files changed

+468
-19
lines changed

djangocms_rest/cms_config.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ def patch_page_menu(menu: type[CMSMenu]):
6565
class NavigationNodeMixin:
6666
"""Mixin to add API endpoint and selection logic to NavigationNode."""
6767

68+
api_endpoint = None
69+
6870
def get_api_endpoint(self):
6971
"""Get the API endpoint for the navigation node."""
7072
return self.api_endpoint

djangocms_rest/serializers/placeholders.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ def to_representation(self, instance):
6363
instance,
6464
context=Context({"request": self.request}),
6565
language=self.language,
66-
use_cache=True,
66+
use_cache=not getattr(self.request, "_preview_mode", False),
6767
)
6868
if self.request.GET.get("html", False):
6969
html = render_html(self.request, instance, self.language)

djangocms_rest/serializers/utils/cache.py

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,11 @@ def _get_placeholder_cache_version(placeholder, lang, site_id):
2222
else:
2323
version = int(time.time() * 1000000)
2424
vary_on_list = []
25-
_set_placeholder_cache_version(
26-
placeholder, lang, site_id, version, vary_on_list
27-
)
25+
_set_placeholder_cache_version(placeholder, lang, site_id, version, vary_on_list)
2826
return version, vary_on_list
2927

3028

31-
def _set_placeholder_cache_version(
32-
placeholder, lang, site_id, version, vary_on_list=None, duration=None
33-
):
29+
def _set_placeholder_cache_version(placeholder, lang, site_id, version, vary_on_list=None, duration=None):
3430
"""
3531
Sets the (placeholder x lang)'s version and vary-on header-names list.
3632
"""
@@ -63,9 +59,7 @@ def set_placeholder_rest_cache(placeholder, lang, site_id, content, request):
6359

6460
# "touch" the cache-version, so that it stays as fresh as this content.
6561
version, vary_on_list = _get_placeholder_cache_version(placeholder, lang, site_id)
66-
_set_placeholder_cache_version(
67-
placeholder, lang, site_id, version, vary_on_list, duration=duration
68-
)
62+
_set_placeholder_cache_version(placeholder, lang, site_id, version, vary_on_list, duration=duration)
6963

7064

7165
def get_placeholder_rest_cache(placeholder, lang, site_id, request):
@@ -75,9 +69,5 @@ def get_placeholder_rest_cache(placeholder, lang, site_id, request):
7569
"""
7670
from django.core.cache import cache
7771

78-
key = (
79-
_get_placeholder_cache_key(placeholder, lang, site_id, request, soft=True)
80-
+ ":rest"
81-
)
82-
content = cache.get(key)
83-
return content
72+
key = f"{_get_placeholder_cache_key(placeholder, lang, site_id, request, soft=True)}:rest"
73+
return cache.get(key)

djangocms_rest/views.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
get_object,
3232
get_site_filtered_queryset,
3333
)
34-
from djangocms_rest.views_base import BaseAPIView, BaseListAPIView
34+
from djangocms_rest.views_base import BaseAPIView, BaseListAPIView, preview_schema
3535
from djangocms_rest.schemas import extend_placeholder_schema, extend_page_search_schema, menu_schema_class
3636

3737
# Generate the plugin definitions once at module load time
@@ -220,6 +220,7 @@ def get(self, request: Request) -> Response:
220220
return Response(definitions)
221221

222222

223+
@preview_schema
223224
@menu_schema_class
224225
class MenuView(BaseAPIView):
225226
permission_classes = [IsAllowedPublicLanguage]
@@ -298,7 +299,6 @@ def get_menu_structure(
298299
return result
299300

300301

301-
@menu_schema_class
302302
class SubMenuView(MenuView):
303303
tag = ShowSubMenu
304304

@@ -308,7 +308,6 @@ def populate_defaults(self, kwargs: dict[str, Any]) -> None:
308308
kwargs.setdefault("nephews", 100)
309309

310310

311-
@menu_schema_class
312311
class BreadcrumbView(MenuView):
313312
tag = ShowBreadcrumb
314313
return_key = "ancestors"

0 commit comments

Comments
 (0)