mirror of
https://github.com/django/django.git
synced 2025-01-27 10:39:40 +00:00
Fixed #30498 -- Fixed proxy class caching in lazy().
lazy() should prepare the proxy class only once (the first time it's used) not on every call. Regression in b4e76f30d12bfa8a53cc297c60055c6f4629cc4c.
This commit is contained in:
parent
b711eafd2a
commit
a2c31e12da
@ -79,7 +79,7 @@ def lazy(func, *resultclasses):
|
||||
self.__kw = kw
|
||||
if not self.__prepared:
|
||||
self.__prepare_class__()
|
||||
self.__prepared = True
|
||||
self.__class__.__prepared = True
|
||||
|
||||
def __reduce__(self):
|
||||
return (
|
||||
|
@ -1,3 +1,5 @@
|
||||
from unittest import mock
|
||||
|
||||
from django.test import SimpleTestCase
|
||||
from django.utils.functional import cached_property, lazy
|
||||
|
||||
@ -207,3 +209,12 @@ class FunctionalTests(SimpleTestCase):
|
||||
original_object = b'J\xc3\xbcst a str\xc3\xadng'
|
||||
lazy_obj = lazy(lambda: original_object, bytes)
|
||||
self.assertEqual(repr(original_object), repr(lazy_obj()))
|
||||
|
||||
def test_lazy_class_preparation_caching(self):
|
||||
# lazy() should prepare the proxy class only once i.e. the first time
|
||||
# it's used.
|
||||
lazified = lazy(lambda: 0, int)
|
||||
__proxy__ = lazified().__class__
|
||||
with mock.patch.object(__proxy__, '__prepare_class__') as mocked:
|
||||
lazified()
|
||||
mocked.assert_not_called()
|
||||
|
Loading…
x
Reference in New Issue
Block a user