Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Merge pull request #1479 from nickbruun/ticket_20924

Proxy __len__ and __contains__ for LazyObject
  • Loading branch information...
commit aa01c99f5587b36c354e80c682ad52e1a3b41455 2 parents c2907a6 + 7a698c0
@alex alex authored
View
3  django/utils/functional.py
@@ -270,6 +270,9 @@ def __setitem__(self, key, value):
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
View
13 tests/utils_tests/test_simplelazyobject.py
@@ -136,6 +136,9 @@ def test_dict(self):
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 @@ def test_pickle_py2_regression(self):
# 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)

1 comment on commit aa01c99

@aaugustin
Owner

That commit created a regression that's blocking the 1.7 release: https://code.djangoproject.com/ticket/21840

@nickbruun @alex Do you have an idea to avoid that problem? Or should I simply revert the commit?

Please sign in to comment.
Something went wrong with that request. Please try again.