From ffd18732f3ee9e6f0374aff9ccf350d85187fac2 Mon Sep 17 00:00:00 2001 From: Chesco Igual Date: Sat, 4 Jun 2016 16:13:00 -0700 Subject: [PATCH] Fixed #24781 -- Fixed repr() for lazy objects. --- django/utils/functional.py | 3 +++ tests/utils_tests/test_functional.py | 15 +++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/django/utils/functional.py b/django/utils/functional.py index f674a9bba23..ee301879dfc 100644 --- a/django/utils/functional.py +++ b/django/utils/functional.py @@ -75,6 +75,9 @@ def lazy(func, *resultclasses): (func, self.__args, self.__kw) + resultclasses ) + def __repr__(self): + return repr(self.__cast()) + @classmethod def __prepare_class__(cls): for resultclass in resultclasses: diff --git a/tests/utils_tests/test_functional.py b/tests/utils_tests/test_functional.py index 66a6f59cf6f..2cf399f8924 100644 --- a/tests/utils_tests/test_functional.py +++ b/tests/utils_tests/test_functional.py @@ -130,3 +130,18 @@ class FunctionalTestCase(unittest.TestCase): self.assertEqual(lazy_a(), lazy_b()) self.assertNotEqual(lazy_b(), lazy_c()) + + def test_lazy_repr_text(self): + original_object = 'Lazy translation text' + lazy_obj = lazy(lambda: original_object, six.text_type) + self.assertEquals(repr(original_object), repr(lazy_obj())) + + def test_lazy_repr_int(self): + original_object = 15 + lazy_obj = lazy(lambda: original_object, int) + self.assertEquals(repr(original_object), repr(lazy_obj())) + + def test_lazy_repr_bytes(self): + original_object = b'J\xc3\xbcst a str\xc3\xadng' + lazy_obj = lazy(lambda: original_object, bytes) + self.assertEquals(repr(original_object), repr(lazy_obj()))