Capture names from 3rd party auth accounts
[oweals/karmaworld.git] / karmaworld / apps / users / models.py
1 #!/usr/bin/env python
2 # -*- coding:utf8 -*-
3 # Copyright (C) 2013  FinalsClub Foundation
4 import random
5 import logging
6 from allauth.account.signals import user_logged_in, user_signed_up, email_confirmed, email_changed, email_added
7 from allauth.socialaccount.signals import pre_social_login
8 from django.contrib.auth.models import User
9 from django.core.exceptions import ObjectDoesNotExist
10 from django.db.models.signals import post_save, pre_save
11 from django.dispatch import receiver
12 from django.db import models, DatabaseError
13 from django.middleware.transaction import transaction
14 from karmaworld.apps.courses.models import School
15
16 logger = logging.getLogger(__name__)
17
18 class UserProfile(models.Model):
19     user      = models.OneToOneField(User)
20
21     school    = models.ForeignKey(School, blank=True, null=True)
22
23     karma     = models.IntegerField(default=0)
24
25     def __unicode__(self):
26         return self.user.__unicode__()
27
28 def user_display_name(user):
29     """Return the best way to display a user's
30     name to them on the site."""
31     if hasattr(user, 'first_name') and user.first_name and \
32             hasattr(user, 'last_name') and user.last_name:
33         return user.first_name + ' ' + user.last_name
34     elif hasattr(user, 'email') and user.email:
35         return user.email
36     else:
37         return user.username
38
39 @receiver(post_save, sender=User, weak=True)
40 def create_user_profile(sender, instance, created, **kwargs):
41     if created:
42         with transaction.commit_on_success():
43             try:
44                 UserProfile.objects.create(user=instance)
45             except DatabaseError:
46                 logger.warn("Could not create UserProfile for user {u}. This is okay if running syncdb.".format(u=instance))
47