Commit 0efafa4c authored by Aymeric Augustin's avatar Aymeric Augustin
Browse files

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

Thanks Roman Gladkov and Zbigniew Siciarz.
parent 7cf0f042
Loading
Loading
Loading
Loading
+14 −1
Original line number Diff line number Diff line
@@ -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
+10 −0
Original line number Diff line number Diff line
@@ -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']