mirror of
https://github.com/django/django.git
synced 2024-12-22 17:16:24 +00:00
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>
This commit is contained in:
parent
0a132de7eb
commit
066aabcb77
@ -125,9 +125,8 @@ def lazy(func, *resultclasses):
|
|||||||
raise ValueError(
|
raise ValueError(
|
||||||
"Cannot call lazy() with both bytes and text return types."
|
"Cannot call lazy() with both bytes and text return types."
|
||||||
)
|
)
|
||||||
if cls._delegate_text:
|
|
||||||
cls.__str__ = cls.__text_cast
|
if cls._delegate_bytes:
|
||||||
elif cls._delegate_bytes:
|
|
||||||
cls.__bytes__ = cls.__bytes_cast
|
cls.__bytes__ = cls.__bytes_cast
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -141,17 +140,12 @@ def lazy(func, *resultclasses):
|
|||||||
|
|
||||||
return __wrapper__
|
return __wrapper__
|
||||||
|
|
||||||
def __text_cast(self):
|
|
||||||
return func(*self.__args, **self.__kw)
|
|
||||||
|
|
||||||
def __bytes_cast(self):
|
def __bytes_cast(self):
|
||||||
return bytes(func(*self.__args, **self.__kw))
|
return bytes(func(*self.__args, **self.__kw))
|
||||||
|
|
||||||
def __cast(self):
|
def __cast(self):
|
||||||
if self._delegate_bytes:
|
if self._delegate_bytes:
|
||||||
return self.__bytes_cast()
|
return self.__bytes_cast()
|
||||||
elif self._delegate_text:
|
|
||||||
return self.__text_cast()
|
|
||||||
else:
|
else:
|
||||||
return func(*self.__args, **self.__kw)
|
return func(*self.__args, **self.__kw)
|
||||||
|
|
||||||
|
@ -233,6 +233,10 @@ class FunctionalTests(SimpleTestCase):
|
|||||||
with self.assertRaisesMessage(ValueError, msg):
|
with self.assertRaisesMessage(ValueError, msg):
|
||||||
lazy_obj()
|
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):
|
def test_classproperty_getter(self):
|
||||||
class Foo:
|
class Foo:
|
||||||
foo_attr = 123
|
foo_attr = 123
|
||||||
|
Loading…
Reference in New Issue
Block a user