mirror of
https://github.com/django/django.git
synced 2024-12-22 09:05:43 +00:00
Allowed custom formatting of lazy() objects.
This allows for formatting of lazy objects which have a custom formatter defined by overriding the default implementation from `object`.
This commit is contained in:
parent
fd97b0471b
commit
e042024b28
@ -151,6 +151,9 @@ def lazy(func, *resultclasses):
|
||||
def __hash__(self):
|
||||
return hash(self.__cast())
|
||||
|
||||
def __format__(self, format_spec):
|
||||
return format(self.__cast(), format_spec)
|
||||
|
||||
# Explicitly wrap methods which are required for certain operations on
|
||||
# int/str objects to function correctly.
|
||||
|
||||
|
@ -246,6 +246,17 @@ class FunctionalTests(SimpleTestCase):
|
||||
self.assertEqual(lazy_a() * 5, "aaaaa")
|
||||
self.assertEqual(lazy_a() * lazy_5(), "aaaaa")
|
||||
|
||||
def test_lazy_format(self):
|
||||
class QuotedString(str):
|
||||
def __format__(self, format_spec):
|
||||
value = super().__format__(format_spec)
|
||||
return f"“{value}”"
|
||||
|
||||
lazy_f = lazy(lambda: QuotedString("Hello!"), QuotedString)
|
||||
self.assertEqual(format(lazy_f(), ""), "“Hello!”")
|
||||
f = lazy_f()
|
||||
self.assertEqual(f"I said, {f}", "I said, “Hello!”")
|
||||
|
||||
def test_lazy_equality(self):
|
||||
"""
|
||||
== and != work correctly for Promises.
|
||||
|
Loading…
Reference in New Issue
Block a user