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
This commit is contained in:
parent
4d6c66d4d8
commit
bcef28349a
|
@ -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."
|
||||
|
|
|
@ -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)
|
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue