summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Plant <L.Plant.98@cantab.net>2010-01-05 12:06:45 +0000
committerLuke Plant <L.Plant.98@cantab.net>2010-01-05 12:06:45 +0000
commitbcef28349a52ff16c9c022b2722138ee9fe62a81 (patch)
treecc72874898a03366b7b115d1fe72b9df5c62f033
parent4d6c66d4d8fa63005f8ca2d3fbae195922969d13 (diff)
Fixed #12506 - 'lazy' fails when there are multiple expected classes with the same method
Thanks to Alex for report and patch git-svn-id: http://code.djangoproject.com/svn/django/trunk@12104 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/utils/functional.py6
-rw-r--r--tests/regressiontests/utils/functional.py10
-rw-r--r--tests/regressiontests/utils/tests.py1
3 files changed, 16 insertions, 1 deletions
diff --git a/django/utils/functional.py b/django/utils/functional.py
index 43b7ab1437..e52ab76a38 100644
--- a/django/utils/functional.py
+++ b/django/utils/functional.py
@@ -167,9 +167,13 @@ def lazy(func, *resultclasses):
for resultclass in resultclasses:
cls.__dispatch[resultclass] = {}
for (k, v) in resultclass.__dict__.items():
+ # All __promise__ return the same wrapper method, but they
+ # also do setup, inserting the method into the dispatch
+ # dict.
+ meth = cls.__promise__(resultclass, k, v)
if hasattr(cls, k):
continue
- setattr(cls, k, cls.__promise__(resultclass, k, v))
+ setattr(cls, k, meth)
cls._delegate_str = str in resultclasses
cls._delegate_unicode = unicode in resultclasses
assert not (cls._delegate_str and cls._delegate_unicode), "Cannot call lazy() with both str and unicode return types."
diff --git a/tests/regressiontests/utils/functional.py b/tests/regressiontests/utils/functional.py
new file mode 100644
index 0000000000..72610154d8
--- /dev/null
+++ b/tests/regressiontests/utils/functional.py
@@ -0,0 +1,10 @@
+from unittest import TestCase
+
+from django.utils.functional import lazy
+
+
+class FunctionalTestCase(TestCase):
+ def test_lazy(self):
+ t = lazy(lambda: tuple(range(3)), list, tuple)
+ for a, b in zip(t(), range(3)):
+ self.assertEqual(a, b)
diff --git a/tests/regressiontests/utils/tests.py b/tests/regressiontests/utils/tests.py
index fe5f463110..cd93fb9c01 100644
--- a/tests/regressiontests/utils/tests.py
+++ b/tests/regressiontests/utils/tests.py
@@ -12,6 +12,7 @@ import datastructures
import itercompat
from decorators import DecoratorFromMiddlewareTests
+from functional import FunctionalTestCase
# We need this because "datastructures" uses sorted() and the tests are run in
# the scope of this module.