Skip to content

Commit

Permalink
Requested changes for PR #66
Browse files Browse the repository at this point in the history
  • Loading branch information
aweakley committed Jul 29, 2024
1 parent 1254d88 commit dfb02fe
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 18 deletions.
12 changes: 8 additions & 4 deletions testproject/home/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -755,7 +755,9 @@ def test_bulk_delete(self):
)
self.cache.set(key, url, timeout)

KeyringItem.objects.bulk_delete_cache_keys(keys[:4])
KeyringItem.objects.bulk_delete_cache_keys(
KeyringItem.objects.filter(key__in=keys[:4])
)

for key in keys[:4]:
self.assertFalse(KeyringItem.objects.filter(key=key).exists())
Expand Down Expand Up @@ -784,7 +786,9 @@ def test_bulk_delete_raw_delete(self):
)
self.cache.set(key, url, timeout)

KeyringItem.objects.bulk_delete_cache_keys(keys[:4])
KeyringItem.objects.bulk_delete_cache_keys(
KeyringItem.objects.filter(key__in=keys[:4])
)

for key in keys[:4]:
self.assertFalse(KeyringItem.objects.filter(key=key).exists())
Expand Down Expand Up @@ -815,7 +819,7 @@ def test_active_for_url_regexes(self):
url=f"{url}/key-3/",
)
self.assertEqual(
KeyringItem.objects.active_for_url_regexes(url).count(), 2
KeyringItem.objects.active_for_url_regexes([url]).count(), 2
)

def test_active_for_urls_no_regexes(self):
Expand All @@ -840,7 +844,7 @@ def test_active_for_urls_no_regexes(self):
url=url2,
)
self.assertEqual(
KeyringItem.objects.active_for_url_regexes().count(), 2
KeyringItem.objects.active_for_url_regexes([]).count(), 2
)

def test_keyringitem_str(self):
Expand Down
4 changes: 1 addition & 3 deletions wagtailcache/cache.py
Original file line number Diff line number Diff line change
Expand Up @@ -381,9 +381,7 @@ def clear_cache(urls: List[str] = []) -> None:

_wagcache = caches[wagtailcache_settings.WAGTAIL_CACHE_BACKEND]
if urls:
active_keys = KeyringItem.objects.active_for_url_regexes(
urls
).values_list("key", flat=True)
active_keys = KeyringItem.objects.active_for_url_regexes(urls)
# Delete the keys from the cache and the keyring
KeyringItem.objects.bulk_delete_cache_keys(active_keys)
# Clears the entire cache backend used by wagtail-cache.
Expand Down
18 changes: 7 additions & 11 deletions wagtailcache/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from django.core.cache import caches
from django.db import models
from django.db.models import Q
from django.db.models import QuerySet
from django.utils.timezone import now

from wagtailcache.settings import wagtailcache_settings
Expand All @@ -26,23 +27,22 @@ def set(self, url, key, expiry) -> "KeyringItem":
self.clear_expired()
return item

def bulk_delete_cache_keys(self, keys: List[str]) -> None:
def bulk_delete_cache_keys(self, keys_qs: QuerySet) -> None:
"""
Bulk delete the keys that exist, in batches
Bulk delete the keys, in batches
"""
existing_keys = self.filter(key__in=keys)
# Delete from cache
for key_batch in batched(
existing_keys.values_list("key", flat=True),
keys_qs.values_list("key", flat=True),
wagtailcache_settings.WAGTAIL_CACHE_BATCH_SIZE,
):
self._wagcache.delete_many(key_batch)
# Delete from database, optionally use `_raw_delete`
# for speed with many cache keys.
if wagtailcache_settings.WAGTAIL_CACHE_USE_RAW_DELETE:
existing_keys._raw_delete(using=self.db)
keys_qs._raw_delete(using=self.db)
else:
existing_keys.delete()
keys_qs.delete()

def clear_expired(self) -> None:
"""
Expand All @@ -53,11 +53,7 @@ def clear_expired(self) -> None:
def active(self):
return self.filter(expiry__gt=now())

def active_for_url_regexes(self, urls=None):
if urls is None:
urls = []
if not isinstance(urls, (list, tuple)):
urls = [urls]
def active_for_url_regexes(self, urls: List[str]):
qs = self.active()
if not urls:
return qs
Expand Down

0 comments on commit dfb02fe

Please sign in to comment.