forked from nathanborror/django-basic-apps
-
Notifications
You must be signed in to change notification settings - Fork 21
/
signals.py
39 lines (29 loc) · 1.09 KB
/
signals.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
from django.core.cache import cache
from django.core.urlresolvers import reverse
from django.contrib.sites.models import Site
from basic.blog.models import Settings
from sugar.cache.utils import create_cache_key
def update_settings(sender=None, instance=None, isnew=False, **kwargs):
if isnew:
return
try:
settings = Settings.objects.get(site=instance)
#save updates cached values
settings.save()
except:
"""
Refactor maybe - this signal is being called during `syncdb` and
failing because Settings don't exist yet. So we `pass` but it feels
like there could be a better solution.
"""
pass
def invalidate_settings_cache(sender=None, instance=None, isnew=False, **kwargs):
if isnew:
return
site_id = instance.site.id
key = create_cache_key(Settings, field='site__id', field_value=site_id)
"""
Invalidate cache, set to None for 5 seconds to safegaurd
against race condition; concept borrowed from mmalone's django-caching
"""
cache.set(key, None, 5)