Commit aa01c99f authored by Alex Gaynor's avatar Alex Gaynor
Browse files

Merge pull request #1479 from nickbruun/ticket_20924

Proxy __len__ and __contains__ for LazyObject
parents c2907a6e 7a698c05
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -270,6 +270,9 @@ class LazyObject(object):
    def __delitem__(self, key):
        del self[key]

    __len__ = new_method_proxy(len)
    __contains__ = new_method_proxy(operator.contains)


# Workaround for http://bugs.python.org/issue12370
_super = super
+13 −0
Original line number Diff line number Diff line
@@ -136,6 +136,9 @@ class TestUtilsSimpleLazyObject(TestCase):
        self.assertEqual(lazydict['one'], 1)
        lazydict['one'] = -1
        self.assertEqual(lazydict['one'], -1)
        self.assertTrue('one' in lazydict)
        self.assertFalse('two' in lazydict)
        self.assertEqual(len(lazydict), 1)
        del lazydict['one']
        with self.assertRaises(KeyError):
            lazydict['one']
@@ -183,3 +186,13 @@ class TestUtilsSimpleLazyObject(TestCase):

            # This would fail with "TypeError: expected string or Unicode object, NoneType found".
            pickled = cPickle.dumps(x)

    def test_list_set(self):
        lazy_list = SimpleLazyObject(lambda: [1, 2, 3, 4, 5])
        lazy_set = SimpleLazyObject(lambda: set([1, 2, 3, 4]))
        self.assertTrue(1 in lazy_list)
        self.assertTrue(1 in lazy_set)
        self.assertFalse(6 in lazy_list)
        self.assertFalse(6 in lazy_set)
        self.assertEqual(len(lazy_list), 5)
        self.assertEqual(len(lazy_set), 4)