summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Kaplan-Moss <jacob@jacobian.org>2009-12-12 17:53:32 +0000
committerJacob Kaplan-Moss <jacob@jacobian.org>2009-12-12 17:53:32 +0000
commitc1a8bd6779c2ff907d2d80b98d79c8ab10d642ae (patch)
tree408c4b2d524753112faae2ca421352bcf0129f5d
parent5e6c3d24b31af8af5514c6b7ecf700ae7836eef8 (diff)
[1.1.X] Fixed #10130: you may now delete attributes on `settings`. Thanks, jcassee.
Backport of r11824. git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.1.X@11825 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/utils/functional.py7
-rw-r--r--tests/regressiontests/settings/__init__.py0
-rw-r--r--tests/regressiontests/settings/models.py0
-rw-r--r--tests/regressiontests/settings/tests.py17
4 files changed, 24 insertions, 0 deletions
diff --git a/django/utils/functional.py b/django/utils/functional.py
index 65a9b9d7aa..e6dbeb32e0 100644
--- a/django/utils/functional.py
+++ b/django/utils/functional.py
@@ -280,6 +280,13 @@ class LazyObject(object):
self._setup()
setattr(self._wrapped, name, value)
+ def __delattr__(self, name):
+ if name == "_wrapped":
+ raise TypeError("can't delete _wrapped.")
+ if self._wrapped is None:
+ self._setup()
+ delattr(self._wrapped, name)
+
def _setup(self):
"""
Must be implemented by subclasses to initialise the wrapped object.
diff --git a/tests/regressiontests/settings/__init__.py b/tests/regressiontests/settings/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/tests/regressiontests/settings/__init__.py
diff --git a/tests/regressiontests/settings/models.py b/tests/regressiontests/settings/models.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/tests/regressiontests/settings/models.py
diff --git a/tests/regressiontests/settings/tests.py b/tests/regressiontests/settings/tests.py
new file mode 100644
index 0000000000..fa217b1d79
--- /dev/null
+++ b/tests/regressiontests/settings/tests.py
@@ -0,0 +1,17 @@
+import unittest
+from django.conf import settings
+
+class SettingsTests(unittest.TestCase):
+
+ #
+ # Regression tests for #10130: deleting settings.
+ #
+
+ def test_settings_delete(self):
+ settings.TEST = 'test'
+ self.assertEqual('test', settings.TEST)
+ del settings.TEST
+ self.assertRaises(AttributeError, getattr, settings, 'TEST')
+
+ def test_settings_delete_wrapped(self):
+ self.assertRaises(TypeError, delattr, settings, '_wrapped')