Fixed #18447 -- Made LazyObject unwrap on dict access.
Thanks Roman Gladkov and Zbigniew Siciarz.
This commit is contained in:
parent
7cf0f04230
commit
0efafa4c54
|
@ -249,9 +249,22 @@ class LazyObject(object):
|
|||
"""
|
||||
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
|
||||
|
|
|
@ -128,3 +128,13 @@ class TestUtilsSimpleLazyObject(TestCase):
|
|||
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']
|
||||
|
|
Loading…
Reference in New Issue