diff options
| author | Ran Benita <ran234@gmail.com> | 2019-05-03 12:58:12 +0300 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2023-03-30 11:42:10 +0200 |
| commit | 066aabcb77579cf8d549119c860d11cd15e3eef1 (patch) | |
| tree | 127b7e01ff529c6670bbcf57b0645a2f4e70b0fc | |
| parent | 0a132de7ebe1e2679ff7d7f6b6e1ad920828dd90 (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.py | 10 | ||||
| -rw-r--r-- | tests/utils_tests/test_functional.py | 4 |
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 |
