]> git.parisson.com Git - django-social-auth.git/commitdiff
Replace raw queries of social auth by uid/provider, and social auth user creation...
authorSteven Cummings <estebistec@gmail.com>
Mon, 25 Jun 2012 04:30:22 +0000 (23:30 -0500)
committerSteven Cummings <estebistec@gmail.com>
Mon, 25 Jun 2012 04:30:22 +0000 (23:30 -0500)
social_auth/backends/pipeline/social.py
social_auth/django_models.py
social_auth/mongoengine_models.py

index 0920009033d969f047995d607145fa7e41d8f71e..632bbe7a28b2a887f51da382e5f9c0b8b1e25b13 100644 (file)
@@ -1,7 +1,8 @@
 from django.db.utils import IntegrityError
 
 from social_auth.utils import setting
-from social_auth.models import UserSocialAuth
+from social_auth.models import create_social_auth
+from social_auth.models import get_social_auth
 from social_auth.backends.pipeline import warn_setting
 from social_auth.backends.exceptions import AuthException
 from django.utils.translation import ugettext
@@ -13,13 +14,7 @@ def social_auth_user(backend, uid, user=None, *args, **kwargs):
 
     Raise AuthException if UserSocialAuth entry belongs to another user.
     """
-    try:
-        social_user = UserSocialAuth.select_related()\
-                                            .get(provider=backend.name,
-                                                 uid=uid)
-    except UserSocialAuth.DoesNotExist:
-        social_user = None
-
+    social_user = get_social_auth(backend.name, uid)
     if social_user:
         if user and social_user.user != user:
             raise AuthException(backend,
@@ -37,10 +32,7 @@ def associate_user(backend, user, uid, social_user=None, *args, **kwargs):
         return None
 
     try:
-        if type(uid) is not str:
-            uid = str(uid)
-        social = UserSocialAuth.objects.create(user=user, uid=uid,
-                                               provider=backend.name)
+        social = create_social_auth(user, uid, backend.name)
     except IntegrityError:
         # Protect for possible race condition, those bastard with FTL
         # clicking capabilities, check issue #131:
index f12a4f9f8a3d4cba9fa3889ae1fca45689bda9b7..3748786b6b24cafbc06963ae735087fb4b6dda98 100644 (file)
@@ -57,10 +57,22 @@ def resolve_user_or_id(user_or_id):
     return User.objects.get(pk=user_or_id)
 
 
+def get_social_auth(provider, uid):
+    try:
+        return UserSocialAuth.objects.select_related('user').get(
+                provider=provider, uid=uid)
+    except UserSocialAuth.DoesNotExist:
+        return None
+
+
 def get_social_auth_for_user(user):
     return user.social_auth.all()
 
 
+def create_social_auth(user, uid, provider):
+    return UserSocialAuth.objects.create(user=user, uid=uid, provider=provider)
+
+
 class UserSocialAuth(models.Model):
     """Social Auth association model"""
     user = models.ForeignKey(User, related_name='social_auth')
@@ -101,10 +113,6 @@ class UserSocialAuth(models.Model):
                 pass
         return None
 
-    @classmethod
-    def select_related(cls):
-        return cls.objects.select_related('user')
-
 
 class Nonce(models.Model):
     """One use numbers"""
index 59fc42ed379bbefe377f44bb7f1158fcd0cb296f..350466bfc98bd7a35ff0ec148f6640f2d5587097 100644 (file)
@@ -65,10 +65,23 @@ def resolve_user_or_id(user_or_id):
     return User.objects.get(pk=user_or_id)
 
 
+def get_social_auth(provider, uid):
+    try:
+        return UserSocialAuth.objects.get(provider=provider, uid=uid)
+    except UserSocialAuth.DoesNotExist:
+        return None
+
+
 def get_social_auth_for_user(user):
     return UserSocialAuth.objects(user=user)
 
 
+def create_social_auth(user, uid, provider):
+    if type(uid) is not str:
+        uid = str(uid)
+    return UserSocialAuth.objects.create(user=user, uid=uid, provider=provider)
+
+
 class UserSocialAuth(Document):
     """Social Auth association model"""
     user = ReferenceField(User)
@@ -80,10 +93,6 @@ class UserSocialAuth(Document):
         """Return associated user unicode representation"""
         return u'%s - %s' % (unicode(self.user), self.provider)
 
-    @classmethod
-    def select_related(cls):
-        return cls.objects #.select_related() No 'user', only provie a depth parameter
-
     @property
     def tokens(self):
         """Return access_token stored in extra_data or None"""