view downloads/signals.py @ 599:2f5779e9d8f8

Fix max users stat not updating.
author Brian Neal <bgneal@gmail.com>
date Wed, 04 Jul 2012 00:14:00 -0500
parents ee87ea74d46b
children 929d0e637a37
line wrap: on
line source
"""Signals for the downloads application.
We use signals to compute the denormalized category counts whenever a download
is saved."""
from django.db.models.signals import post_save
from django.db.models.signals import post_delete

from downloads.models import Category, Download


def on_download_save(sender, **kwargs):
    """This function updates the count field for all categories.
    It is called whenever a download is saved via a signal.
    """
    if kwargs['created']:
        # we only have to update the parent category
        download = kwargs['instance']
        cat = download.category
        cat.count = Download.public_objects.filter(category=cat).count()
        cat.save()
    else:
        # update all categories just to be safe (an existing download could
        # have been moved from one category to another
        cats = Category.objects.all()
        for cat in cats:
            cat.count = Download.public_objects.filter(category=cat).count()
            cat.save()


def on_download_delete(sender, **kwargs):
    """This function updates the count field for the download's parent
    category. It is called when a download is deleted via a signal.
    """
    # update the parent category
    download = kwargs['instance']
    cat = download.category
    cat.count = Download.public_objects.filter(category=cat).count()
    cat.save()


post_save.connect(on_download_save, sender=Download,
        dispatch_uid='downloads.signals')
post_delete.connect(on_download_delete, sender=Download,
        dispatch_uid='downloads.signals')