From a7e99364689749396a7bd614323843e35df9ab95 Mon Sep 17 00:00:00 2001 From: Steven Cummings Date: Sun, 24 Jun 2012 23:30:22 -0500 Subject: [PATCH] Replace raw queries of social auth by uid/provider, and social auth user creation with new methods in models modules --- social_auth/backends/pipeline/social.py | 16 ++++------------ social_auth/django_models.py | 16 ++++++++++++---- social_auth/mongoengine_models.py | 17 +++++++++++++---- 3 files changed, 29 insertions(+), 20 deletions(-) diff --git a/social_auth/backends/pipeline/social.py b/social_auth/backends/pipeline/social.py index 0920009..632bbe7 100644 --- a/social_auth/backends/pipeline/social.py +++ b/social_auth/backends/pipeline/social.py @@ -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: diff --git a/social_auth/django_models.py b/social_auth/django_models.py index f12a4f9..3748786 100644 --- a/social_auth/django_models.py +++ b/social_auth/django_models.py @@ -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""" diff --git a/social_auth/mongoengine_models.py b/social_auth/mongoengine_models.py index 59fc42e..350466b 100644 --- a/social_auth/mongoengine_models.py +++ b/social_auth/mongoengine_models.py @@ -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""" -- 2.39.5