Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Fixed #18447 -- Made LazyObject unwrap on dict access.

Thanks Roman Gladkov and Zbigniew Siciarz.
  • Loading branch information...
commit 0efafa4c54ab8ad684df66c8e34928bb2ba88656 1 parent 7cf0f04
@aaugustin aaugustin authored
View
15 django/utils/functional.py
@@ -249,9 +249,22 @@ def _setup(self):
"""
raise NotImplementedError
- # introspection support:
+ # Introspection support
__dir__ = new_method_proxy(dir)
+ # Dictionary methods support
+ @new_method_proxy
+ def __getitem__(self, key):
+ return self[key]
+
+ @new_method_proxy
+ def __setitem__(self, key, value):
+ self[key] = value
+
+ @new_method_proxy
+ def __delitem__(self, key):
+ del self[key]
+
# Workaround for http://bugs.python.org/issue12370
_super = super
View
10 tests/utils_tests/simplelazyobject.py
@@ -128,3 +128,13 @@ def test_pickle_complex(self):
self.assertEqual(unpickled, x)
self.assertEqual(six.text_type(unpickled), six.text_type(x))
self.assertEqual(unpickled.name, x.name)
+
+ def test_dict(self):
+ # See ticket #18447
+ lazydict = SimpleLazyObject(lambda: {'one': 1})
+ self.assertEqual(lazydict['one'], 1)
+ lazydict['one'] = -1
+ self.assertEqual(lazydict['one'], -1)
+ del lazydict['one']
+ with self.assertRaises(KeyError):
+ lazydict['one']
Please sign in to comment.
Something went wrong with that request. Please try again.