diff -ur django.orig/conf/__init__.py django/conf/__init__.py --- django.orig/conf/__init__.py 2012-07-30 21:42:42.000000000 +0100 +++ django/conf/__init__.py 2012-09-16 23:21:35.788615719 +0100 @@ -148,11 +148,22 @@ Requests for configuration variables not in this class are satisfied from the module specified in default_settings (if possible). """ + self.__dict__['_deleted'] = set() self.default_settings = default_settings def __getattr__(self, name): + if name in self._deleted: + raise AttributeError return getattr(self.default_settings, name) + def __setattr__(self, name, value): + self._deleted.discard(name) + return super(UserSettingsHolder, self).__setattr__(name, value) + + def __delattr__(self, name): + self._deleted.add(name) + return super(UserSettingsHolder, self).__delattr__(name) + def __dir__(self): return self.__dict__.keys() + dir(self.default_settings) diff -ur django.orig/contrib/auth/tests/models.py django/contrib/auth/tests/models.py --- django.orig/contrib/auth/tests/models.py 2012-07-30 21:42:42.000000000 +0100 +++ django/contrib/auth/tests/models.py 2012-09-15 23:11:03.000000000 +0100 @@ -5,77 +5,63 @@ SiteProfileNotAvailable, UserManager) +@override_settings(USE_TZ=False, AUTH_PROFILE_MODULE='') class ProfileTestCase(TestCase): - fixtures = ['authtestdata.json'] - - def setUp(self): - """Backs up the AUTH_PROFILE_MODULE""" - self.old_AUTH_PROFILE_MODULE = getattr(settings, - 'AUTH_PROFILE_MODULE', None) - - def tearDown(self): - """Restores the AUTH_PROFILE_MODULE -- if it was not set it is deleted, - otherwise the old value is restored""" - if self.old_AUTH_PROFILE_MODULE is None and \ - hasattr(settings, 'AUTH_PROFILE_MODULE'): - del settings.AUTH_PROFILE_MODULE - - if self.old_AUTH_PROFILE_MODULE is not None: - settings.AUTH_PROFILE_MODULE = self.old_AUTH_PROFILE_MODULE def test_site_profile_not_available(self): + user = User.objects.create(username='testclient') + # calling get_profile without AUTH_PROFILE_MODULE set - if hasattr(settings, 'AUTH_PROFILE_MODULE'): - del settings.AUTH_PROFILE_MODULE - user = User.objects.get(username='testclient') - self.assertRaises(SiteProfileNotAvailable, user.get_profile) + del settings.AUTH_PROFILE_MODULE + with self.assertRaisesRegexp(SiteProfileNotAvailable, + "You need to set AUTH_PROFILE_MODULE in your project"): + user.get_profile() # Bad syntax in AUTH_PROFILE_MODULE: settings.AUTH_PROFILE_MODULE = 'foobar' - self.assertRaises(SiteProfileNotAvailable, user.get_profile) + with self.assertRaisesRegexp(SiteProfileNotAvailable, + "app_label and model_name should be separated by a dot"): + user.get_profile() # module that doesn't exist settings.AUTH_PROFILE_MODULE = 'foo.bar' - self.assertRaises(SiteProfileNotAvailable, user.get_profile) - -ProfileTestCase = override_settings(USE_TZ=False)(ProfileTestCase) + with self.assertRaisesRegexp(SiteProfileNotAvailable, + "Unable to load the profile model"): + user.get_profile() +@override_settings(USE_TZ=False) class NaturalKeysTestCase(TestCase): fixtures = ['authtestdata.json'] def test_user_natural_key(self): staff_user = User.objects.get(username='staff') - self.assertEquals(User.objects.get_by_natural_key('staff'), staff_user) - self.assertEquals(staff_user.natural_key(), ('staff',)) + self.assertEqual(User.objects.get_by_natural_key('staff'), staff_user) + self.assertEqual(staff_user.natural_key(), ('staff',)) def test_group_natural_key(self): users_group = Group.objects.create(name='users') - self.assertEquals(Group.objects.get_by_natural_key('users'), users_group) - -NaturalKeysTestCase = override_settings(USE_TZ=False)(NaturalKeysTestCase) + self.assertEqual(Group.objects.get_by_natural_key('users'), users_group) +@override_settings(USE_TZ=False) class LoadDataWithoutNaturalKeysTestCase(TestCase): fixtures = ['regular.json'] def test_user_is_created_and_added_to_group(self): user = User.objects.get(username='my_username') group = Group.objects.get(name='my_group') - self.assertEquals(group, user.groups.get()) - -LoadDataWithoutNaturalKeysTestCase = override_settings(USE_TZ=False)(LoadDataWithoutNaturalKeysTestCase) + self.assertEqual(group, user.groups.get()) +@override_settings(USE_TZ=False) class LoadDataWithNaturalKeysTestCase(TestCase): fixtures = ['natural.json'] def test_user_is_created_and_added_to_group(self): user = User.objects.get(username='my_username') group = Group.objects.get(name='my_group') - self.assertEquals(group, user.groups.get()) - -LoadDataWithNaturalKeysTestCase = override_settings(USE_TZ=False)(LoadDataWithNaturalKeysTestCase) + self.assertEqual(group, user.groups.get()) class UserManagerTestCase(TestCase): @@ -83,23 +69,23 @@ def test_create_user(self): email_lowercase = 'normal@normal.com' user = User.objects.create_user('user', email_lowercase) - self.assertEquals(user.email, email_lowercase) - self.assertEquals(user.username, 'user') - self.assertEquals(user.password, '!') + self.assertEqual(user.email, email_lowercase) + self.assertEqual(user.username, 'user') + self.assertEqual(user.password, '!') def test_create_user_email_domain_normalize_rfc3696(self): # According to http://tools.ietf.org/html/rfc3696#section-3 # the "@" symbol can be part of the local part of an email address returned = UserManager.normalize_email(r'Abc\@DEF@EXAMPLE.com') - self.assertEquals(returned, r'Abc\@DEF@example.com') + self.assertEqual(returned, r'Abc\@DEF@example.com') def test_create_user_email_domain_normalize(self): returned = UserManager.normalize_email('normal@DOMAIN.COM') - self.assertEquals(returned, 'normal@domain.com') + self.assertEqual(returned, 'normal@domain.com') def test_create_user_email_domain_normalize_with_whitespace(self): returned = UserManager.normalize_email('email\ with_whitespace@D.COM') - self.assertEquals(returned, 'email\ with_whitespace@d.com') + self.assertEqual(returned, 'email\ with_whitespace@d.com') def test_empty_username(self): self.assertRaisesMessage(ValueError,