summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRan Benita <ran234@gmail.com>2019-05-03 12:58:12 +0300
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2023-03-30 11:42:10 +0200
commit066aabcb77579cf8d549119c860d11cd15e3eef1 (patch)
tree127b7e01ff529c6670bbcf57b0645a2f4e70b0fc
parent0a132de7ebe1e2679ff7d7f6b6e1ad920828dd90 (diff)
Fixed #34445 -- Fixed string-casting of non-string lazy objects.
This removes __text_cast() as it's the same as __cast(). _delegate_bytes and __delegate_text are mutually exclusive so the `if self._delegate_bytes` branch in __cast() is unreachable. Co-Authored-By: David Sanders <shang.xiao.sanders@gmail.com>
-rw-r--r--django/utils/functional.py10
-rw-r--r--tests/utils_tests/test_functional.py4
2 files changed, 6 insertions, 8 deletions
diff --git a/django/utils/functional.py b/django/utils/functional.py
index 236d2ca6e3..666651bd2e 100644
--- a/django/utils/functional.py
+++ b/django/utils/functional.py
@@ -125,9 +125,8 @@ def lazy(func, *resultclasses):
raise ValueError(
"Cannot call lazy() with both bytes and text return types."
)
- if cls._delegate_text:
- cls.__str__ = cls.__text_cast
- elif cls._delegate_bytes:
+
+ if cls._delegate_bytes:
cls.__bytes__ = cls.__bytes_cast
@classmethod
@@ -141,17 +140,12 @@ def lazy(func, *resultclasses):
return __wrapper__
- def __text_cast(self):
- return func(*self.__args, **self.__kw)
-
def __bytes_cast(self):
return bytes(func(*self.__args, **self.__kw))
def __cast(self):
if self._delegate_bytes:
return self.__bytes_cast()
- elif self._delegate_text:
- return self.__text_cast()
else:
return func(*self.__args, **self.__kw)
diff --git a/tests/utils_tests/test_functional.py b/tests/utils_tests/test_functional.py
index 23e2eaddcd..f1cc751bdd 100644
--- a/tests/utils_tests/test_functional.py
+++ b/tests/utils_tests/test_functional.py
@@ -233,6 +233,10 @@ class FunctionalTests(SimpleTestCase):
with self.assertRaisesMessage(ValueError, msg):
lazy_obj()
+ def test_lazy_str_cast_mixed_result_types(self):
+ lazy_value = lazy(lambda: [1], str, list)()
+ self.assertEqual(str(lazy_value), "[1]")
+
def test_classproperty_getter(self):
class Foo:
foo_attr = 123