invalidate URL cache on URLItem save
authorTero Marttila <terom@fixme.fi>
Sat, 07 Sep 2013 15:57:05 +0300
changeset 83 35bdf2acbbaa
parent 82 6442e5c97b48
child 84 e5d8e17f307f
invalidate URL cache on URLItem save
qrurls/models.py
--- a/qrurls/models.py	Sat Sep 07 15:48:23 2013 +0300
+++ b/qrurls/models.py	Sat Sep 07 15:57:05 2013 +0300
@@ -5,6 +5,7 @@
 
 import django.core.files.storage
 import django.utils.http
+from django import dispatch
 from django.contrib.sites.models import get_current_site
 from django.core.cache import cache
 from django.core.urlresolvers import reverse
@@ -59,6 +60,10 @@
         verbose_name = u"URL Feed"
         verbose_name_plural = u"URL Feeds"
 
+    @classmethod
+    def cache_key (self, shorturl) :
+        return 'qrurls/url/{shorturl}'.format(shorturl=shorturl)
+
     def qrcode_img (self, size=512) :
         return QRCODE_API.format(
                 width=size, height=size,
@@ -228,8 +233,7 @@
             Returns url:str, modified:datetime
             Raises URLItem.NotFound
         """
-
-        key = 'qrurls/url/{shorturl}'.format(shorturl=shorturl)
+        key = URL.cache_key(shorturl)
         get = cache.get(key)
         
         if get :
@@ -298,3 +302,11 @@
                 url=self.get_absolute_url(),
         )
 
+@dispatch.receiver(models.signals.post_save, sender=URLItem)
+def urlitem_save(instance, **kwargs) :
+    # invalidate cache
+    key = URL.cache_key(instance.shorturl.shorturl)
+    log.info("clear cache: %s: %s", instance, key)
+    cache.delete(key)
+
+