Mercurial > public > sg101
changeset 921:6d08b1476a52
Weblinks app refactor.
For Django 1.7.7 upgrade.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Tue, 07 Apr 2015 20:16:06 -0500 |
parents | 5902dc5e58a3 |
children | 1a832625c047 |
files | weblinks/__init__.py weblinks/apps.py weblinks/receivers.py weblinks/signals.py |
diffstat | 4 files changed, 53 insertions(+), 42 deletions(-) [+] |
line wrap: on
line diff
--- a/weblinks/__init__.py Tue Apr 07 20:11:32 2015 -0500 +++ b/weblinks/__init__.py Tue Apr 07 20:16:06 2015 -0500 @@ -1,1 +1,1 @@ -import signals +default_app_config = 'weblinks.apps.WeblinksConfig'
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/weblinks/apps.py Tue Apr 07 20:16:06 2015 -0500 @@ -0,0 +1,9 @@ +from django.apps import AppConfig + + +class WeblinksConfig(AppConfig): + name = 'weblinks' + verbose_name = 'Web Links' + + def ready(self): + import weblinks.receivers
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/weblinks/receivers.py Tue Apr 07 20:16:06 2015 -0500 @@ -0,0 +1,43 @@ +"""Signal handlers for the weblinks application. + +We use signals to compute the denormalized category counts whenever a weblink +is saved. +""" +from django.db.models.signals import post_save +from django.db.models.signals import post_delete + +from weblinks.models import Category, Link + + +def on_link_save(sender, **kwargs): + """This function updates the count field for all categories. + It is called whenever a link is saved via a signal. + """ + if kwargs['created']: + # we only have to update the parent category + link = kwargs['instance'] + cat = link.category + cat.count = Link.public_objects.filter(category=cat).count() + cat.save() + else: + # update all categories just to be safe (an existing link could + # have been moved from one category to another + cats = Category.objects.all() + for cat in cats: + cat.count = Link.public_objects.filter(category=cat).count() + cat.save() + + +def on_link_delete(sender, **kwargs): + """This function updates the count field for the link's parent + category. It is called when a link is deleted via a signal. + """ + # update the parent category + link = kwargs['instance'] + cat = link.category + cat.count = Link.public_objects.filter(category=cat).count() + cat.save() + + +post_save.connect(on_link_save, sender=Link, dispatch_uid='weblinks.receivers') +post_delete.connect(on_link_delete, sender=Link, dispatch_uid='weblinks.receivers')
--- a/weblinks/signals.py Tue Apr 07 20:11:32 2015 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ -"""Signals for the weblinks application. -We use signals to compute the denormalized category counts whenever a weblink -is saved.""" -from django.db.models.signals import post_save -from django.db.models.signals import post_delete - -from weblinks.models import Category, Link - - -def on_link_save(sender, **kwargs): - """This function updates the count field for all categories. - It is called whenever a link is saved via a signal. - """ - if kwargs['created']: - # we only have to update the parent category - link = kwargs['instance'] - cat = link.category - cat.count = Link.public_objects.filter(category=cat).count() - cat.save() - else: - # update all categories just to be safe (an existing link could - # have been moved from one category to another - cats = Category.objects.all() - for cat in cats: - cat.count = Link.public_objects.filter(category=cat).count() - cat.save() - - -def on_link_delete(sender, **kwargs): - """This function updates the count field for the link's parent - category. It is called when a link is deleted via a signal. - """ - # update the parent category - link = kwargs['instance'] - cat = link.category - cat.count = Link.public_objects.filter(category=cat).count() - cat.save() - - -post_save.connect(on_link_save, sender=Link, dispatch_uid='weblinks.signals') -post_delete.connect(on_link_delete, sender=Link, dispatch_uid='weblinks.signals')