Files

46 lines
1.3 KiB
Python
Raw Permalink Normal View History

2022-11-21 12:15:22 -05:00
from typing import Optional
2022-11-21 11:17:04 -05:00
from django.core.cache import cache
from rest_framework.utils.serializer_helpers import ReturnDict
ENTRIES_CACHE_TIMEOUT = 7200 # 2 hours
def _entries_cache_key(project_slug: str, version_slug: str, category_slug: str) -> str:
return f"entries_{project_slug}_{version_slug}_{category_slug}"
def get_entries_cache(
project_slug: str, version_slug: str, category_slug: str
2022-11-21 12:15:22 -05:00
) -> Optional[ReturnDict]:
2022-11-21 11:17:04 -05:00
"""
Fetches cached entries data.
"""
return cache.get(_entries_cache_key(project_slug, version_slug, category_slug))
def set_entries_cache(
project_slug: str, version_slug: str, category_slug: str, data: ReturnDict
2022-11-21 12:17:43 -05:00
) -> None:
2022-11-21 11:17:04 -05:00
"""
Updates cached entries data.
"""
2022-11-21 12:17:43 -05:00
cache.set(
2022-11-21 12:15:22 -05:00
_entries_cache_key(project_slug, version_slug, category_slug),
data,
ENTRIES_CACHE_TIMEOUT,
)
2022-11-21 11:17:04 -05:00
2022-11-21 12:17:43 -05:00
def invalidate_entries_cache(
project_slug: str, version_slug: str, data: ReturnDict
) -> None:
2022-11-21 11:17:04 -05:00
"""
Invalidates all affected entries caches.
"""
all_categories = set()
for entry in data["entries"]:
for category in entry["categories"]:
all_categories.add(category)
for category_slug in all_categories:
cache.delete(_entries_cache_key(project_slug, version_slug, category_slug))