Skip to content

Commit 324f42e

Browse files
committed
cleanup
1 parent 132db76 commit 324f42e

File tree

2 files changed

+28
-39
lines changed

2 files changed

+28
-39
lines changed

djangosaml2/backends.py

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import logging
1717
from typing import Any, Optional, Tuple
1818

19+
from django.apps import apps
1920
from django.conf import settings
2021
from django.contrib import auth
2122
from django.contrib.auth.backends import ModelBackend
@@ -27,30 +28,16 @@
2728
logger = logging.getLogger('djangosaml2')
2829

2930

30-
def get_model(model_path: str):
31-
from django.apps import apps
32-
try:
33-
return apps.get_model(model_path)
34-
except LookupError:
35-
raise ImproperlyConfigured(f"SAML_USER_MODEL refers to model '{model_path}' that has not been installed")
36-
except ValueError:
37-
raise ImproperlyConfigured(f"SAML_USER_MODEL is {model_path}, but must be of the form 'app_label.model_name'")
38-
39-
4031
def set_attribute(obj: Any, attr: str, new_value: Any) -> bool:
4132
""" Set an attribute of an object to a specific value, if it wasn't that already.
4233
Return True if the attribute was changed and False otherwise.
4334
"""
44-
4535
if not hasattr(obj, attr):
4636
setattr(obj, attr, new_value)
4737
return True
48-
else:
49-
old_value = getattr(obj, attr)
50-
if new_value != old_value:
51-
setattr(obj, attr, new_value)
52-
return True
53-
38+
if new_value != getattr(obj, attr):
39+
setattr(obj, attr, new_value)
40+
return True
5441
return False
5542

5643

@@ -64,7 +51,13 @@ class Saml2Backend(ModelBackend):
6451
def _user_model(self):
6552
""" Returns the user model specified in the settings, or the default one from this Django installation """
6653
if hasattr(settings, 'SAML_USER_MODEL'):
67-
return get_model(settings.SAML_USER_MODEL)
54+
try:
55+
return apps.get_model(settings.SAML_USER_MODEL)
56+
except LookupError:
57+
raise ImproperlyConfigured(f"Model '{settings.SAML_USER_MODEL}' could not be loaded")
58+
except ValueError:
59+
raise ImproperlyConfigured(f"Model was specified as '{settings.SAML_USER_MODEL}', but it must be of the form 'app_label.model_name'")
60+
6861
return auth.get_user_model()
6962

7063
@property

tests/testprofiles/tests.py

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -21,29 +21,12 @@
2121
from django.core.exceptions import ImproperlyConfigured
2222
from django.test import TestCase, override_settings
2323

24-
from djangosaml2.backends import (Saml2Backend, get_model, set_attribute)
24+
from djangosaml2.backends import Saml2Backend, set_attribute
2525

2626
from .models import TestUser
2727

28-
User = get_user_model() # = TestUser
29-
3028

3129
class BackendUtilMethodsTests(TestCase):
32-
def test_get_model_ok(self):
33-
user_model = get_model('testprofiles.TestUser')
34-
self.assertEqual(user_model, TestUser)
35-
36-
def test_get_model_nonexisting(self):
37-
nonexisting_model = 'testprofiles.NonExisting'
38-
39-
with self.assertRaisesMessage(ImproperlyConfigured, f"SAML_USER_MODEL refers to model '{nonexisting_model}' that has not been installed"):
40-
get_model(nonexisting_model)
41-
42-
def test_get_model_invalid_specifier(self):
43-
nonexisting_model = 'random_package.specifier.testprofiles.NonExisting'
44-
45-
with self.assertRaisesMessage(ImproperlyConfigured, "SAML_USER_MODEL is random_package.specifier.testprofiles.NonExisting, but must be of the form 'app_label.model_name'"):
46-
get_model(nonexisting_model)
4730

4831
def test_set_attribute(self):
4932
u = TestUser()
@@ -74,6 +57,19 @@ def setUp(self):
7457
self.backend = self.backend_cls()
7558
self.user = TestUser.objects.create(username='john')
7659

60+
def test_get_model_ok(self):
61+
self.assertEqual(self.backend._user_model, TestUser)
62+
63+
def test_get_model_nonexisting(self):
64+
with override_settings(SAML_USER_MODEL='testprofiles.NonExisting'):
65+
with self.assertRaisesMessage(ImproperlyConfigured, "Model 'testprofiles.NonExisting' could not be loaded"):
66+
self.assertEqual(self.backend._user_model, None)
67+
68+
def test_get_model_invalid_specifier(self):
69+
with override_settings(SAML_USER_MODEL='random_package.specifier.testprofiles.NonExisting'):
70+
with self.assertRaisesMessage(ImproperlyConfigured, "Model was specified as 'random_package.specifier.testprofiles.NonExisting', but it must be of the form 'app_label.model_name'"):
71+
self.assertEqual(self.backend._user_model, None)
72+
7773
def test_user_model_specified(self):
7874
with override_settings(AUTH_USER_MODEL='auth.User'):
7975
with override_settings(SAML_USER_MODEL='testprofiles.TestUser'):
@@ -209,10 +205,10 @@ def test_create_user_with_required_fields(self):
209205
self.assertIs(user.email_verified, True)
210206

211207
def test_django_user_main_attribute(self):
212-
old_username_field = User.USERNAME_FIELD
213-
User.USERNAME_FIELD = 'slug'
208+
old_username_field = get_user_model().USERNAME_FIELD
209+
get_user_model().USERNAME_FIELD = 'slug'
214210
self.assertEqual(self.backend._user_lookup_attribute, 'slug')
215-
User.USERNAME_FIELD = old_username_field
211+
get_user_model().USERNAME_FIELD = old_username_field
216212

217213
with override_settings(AUTH_USER_MODEL='auth.User'):
218214
self.assertEqual(

0 commit comments

Comments
 (0)