Metadata-Version: 1.0
Name: django-cache-sweeper
Version: 0.1.2
Summary: Lazy Django fragment cache sweeping
Home-page: http://github.com/smn/django-cache-sweeper
Author: Simon de Haan
Author-email: simon@praekeltfoundation.org
License: BSD
Description: ==================================
        Django Fragment Cache Invalidation
        ==================================
        
        Fragment cache invalidation by using a per model version token to prefix the cache keys. The version token can either be an internal memcached counter or a timestamped attribute from the model, such as `updated_at`.
        
        Installation
        ------------
        
        Install with `pip` or with `python setup.py install` and add 'cachesweeper' to your `settings.INSTALLED_APPS`
        
        
        post_save cache sweeper
        -----------------------
        
        An example setup; an article has many comments, each comment is cached, a single vote should invalidate the comment's specific cached fragment as well as the total article's page.
            
        **Template fragment caching**
        
        `{% cachesweeper %}` takes a Django ORM model as its first argument, the expiry time as its second and any following arguments are used to construct the rest of the cache key
        
        ::
        
            {% load markup %}
            {% load cachesweeper_tags %}
            {% cachesweeper comment 500 "comment.xml" %}
            <p>
                <strong>{{comment.user}}</strong> said at {{comment.created_at}}:<br/>
                {{comment.content|markdown}}
                <br/>
                <a href={% url like article_id=article.pk,comment_id=comment.pk %}>Like ({{comment.likes.count}})</a>
                <a href={% url dislike article_id=article.pk,comment_id=comment.pk %}>Dislike ({{comment.dislikes.count}})</a>
            </p>
            {% endcachesweeper %}
        
        **Invalidating the fragment when the model changes**
        
        On a post_save invalidate the cache for the given model. There are two options, either have Memcached keep an internal version counter for each model or using the keyword `using` as a means of versioning the cache.
        
        ::
            
            from cachesweeper.utils import invalidate_cache_for
            
            # using Memcached's internal counter
            def invalidate_vote_cache(sender, **kwargs):
                vote = kwargs.get('instance')
                invalidate_cache_for(vote.comment)
            
            post_save.connect(invalidate_vote_cache, sender=Vote)
            
            
            # using a model's attribute
            def invalidate_article_cache(sender, **kwargs):
                article = kwargs.get('instance')
                invalidate_cache_for(article, using='updated_at')
            
            post_save.connect(invalidate_article_cache, sender=Article)
        
        
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: BSD License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Framework :: Django
Classifier: Topic :: Software Development :: Libraries :: Python Modules
