Django Cache Decorator

// simple decorator for caching result

from django.core.cache import cache

def cached(cache_key):
    """Cache decorator
    """
    def doCache(func):
        def _get_cached(*args, **kwargs):
            result = cache.get(cache_key)
            if result is None:
                result = func(*args, **kwargs)
                cache.set(cache_key, result)

            return result
        return _get_cached
    return doCache

def delete_cached(cache_key):
    """Delete cache decorator
    """
    def doDeleteCache(func):
        def _delete_cached(*args, **kwargs):
            result = func(*args, **kwargs)
            cache.delete(cache_key)
            return result
        return _delete_cached
    return doDeleteCache

// you can use this decorator into your models.
// for example

from google.appengine.ext import db
class Tag(db.Model):
    """The snippet tags
    """
    name = db.StringProperty()
    description = db.TextProperty()
    entrycount = db.IntegerProperty(default=0)
    
    @staticmethod
    @cached('tags')
    def getall():
        return [tag for tag in Tag.all()]

    @delete_cached('tags')
    def save(self):
        """Will save the current tag and invalidate the cache automatically"""
        self.put()
  
    @delete_cached('tags')
    def remove(self):
        self.delete()

0 Comments

Post A Comment