Mercurial > public > sg101
view bio/signals.py @ 905:be233ba7ca31
Reworked registration process.
Previous one proved too challenging for some humans.
Hopefully made it simpler but still unusual to confuse bots.
Increased test coverage also.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Sun, 08 Mar 2015 11:06:07 -0500 |
parents | ee87ea74d46b |
children | 0b6bf9c5a982 |
line wrap: on
line source
""" Signal handlers & signals for the bio application. """ from django.db.models.signals import post_save from django.contrib.auth.models import User import django.dispatch from donations.models import Donation from weblinks.models import Link from downloads.models import Download from news.models import Story from potd.models import Photo def on_user_save(sender, **kwargs): """ This signal handler ensures that every User has a corresonding UserProfile. It is called after User instance is saved. It creates a UserProfile for the User if the created argument is True. """ created = kwargs['created'] if created: user = kwargs['instance'] profile = UserProfile() profile.user = user profile.save() def on_donation_save(sender, **kwargs): """ This function is called after a Donation is saved. If the Donation was newly created and not anonymous, award the user a contributor pin. """ if kwargs['created']: donation = kwargs['instance'] if not donation.is_anonymous and donation.user: bio.badges.award_badge(bio.badges.CONTRIBUTOR_PIN, donation.user) def on_link_save(sender, **kwargs): """ This function is called after a Link is saved. If the Link was newly created, award the user a link pin. """ if kwargs['created']: link = kwargs['instance'] bio.badges.award_badge(bio.badges.LINK_PIN, link.user) def on_download_save(sender, **kwargs): """ This function is called after a Download is saved. If the Download was newly created, award the user a download pin. """ if kwargs['created']: download = kwargs['instance'] bio.badges.award_badge(bio.badges.DOWNLOAD_PIN, download.user) def on_story_save(sender, **kwargs): """ This function is called after a Story is saved. If the Story was newly created, award the user a news pin. """ if kwargs['created']: story = kwargs['instance'] bio.badges.award_badge(bio.badges.NEWS_PIN, story.submitter) def on_photo_save(sender, **kwargs): """ This function is called after a Photo is saved. If the Photo was newly created, award the user a POTD pin. """ if kwargs['created']: photo = kwargs['instance'] bio.badges.award_badge(bio.badges.POTD_PIN, photo.user) post_save.connect(on_user_save, sender=User, dispatch_uid='bio.signals') post_save.connect(on_donation_save, sender=Donation, dispatch_uid='bio.signals') post_save.connect(on_link_save, sender=Link, dispatch_uid='bio.signals') post_save.connect(on_download_save, sender=Download, dispatch_uid='bio.signals') post_save.connect(on_story_save, sender=Story, dispatch_uid='bio.signals') post_save.connect(on_photo_save, sender=Photo, dispatch_uid='bio.signals') # Signals for the bio application # # This signal is sent whenever a profile has had its textual content updated. # The provided arguments to the receiver function are: # - sender - the profile model instance profile_content_update = django.dispatch.Signal(providing_args=[]) def notify_profile_content_update(profile): """ Convenience function to send the profile content update signal. """ profile_content_update.send_robust(profile) # To avoid circular imports import bio.badges from bio.models import UserProfile