regluit/core/signals.py

53 lines
1.7 KiB
Python

from django.db.models import get_model
from django.db.utils import DatabaseError
from django.db.models.signals import post_save
from django.contrib.auth.models import User
from social_auth.signals import pre_update
from social_auth.backends.facebook import FacebookBackend
from tastypie.models import create_api_key
import logging
logger = logging.getLogger(__name__)
# get email from Facebook registration
def facebook_extra_values(sender, user, response, details, **kwargs):
if response.get('email') is not None:
user.email = response.get('email')
return True
pre_update.connect(facebook_extra_values, sender=FacebookBackend)
# create Wishlist and UserProfile to associate with User
def create_user_objects(sender, created, instance, **kwargs):
# use get_model to avoid circular import problem with models
try:
Wishlist = get_model('core', 'Wishlist')
UserProfile = get_model('core', 'UserProfile')
if created:
Wishlist.objects.create(user=instance)
UserProfile.objects.create(user=instance)
except DatabaseError:
# this can happen when creating superuser during syncdb since the
# core_wishlist table doesn't exist yet
return
post_save.connect(create_user_objects, sender=User)
# create API key for new User
post_save.connect(create_api_key, sender=User)
# handle any save, updates to a payment.Transaction
def handle_transaction_change(sender, instance, created, **kwargs):
try:
campaign = instance.campaign
logger.info('Got the signal for Transaction %s w/ Campaign %s ', instance.id, campaign.id)
return True
except Exception, e:
return False
post_save.connect(handle_transaction_change,sender=get_model('payment','Transaction'))