1
0
Fork 0
forked from github/pelican

Merge pull request #3124 from FriedrichFroebel/issue3110

This commit is contained in:
Justin Mayer 2023-06-04 10:32:49 +02:00 committed by GitHub
commit 043ab617b8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 34 additions and 1 deletions

View file

@ -860,3 +860,34 @@ class TestSanitisedJoin(unittest.TestCase):
utils.posixize_path(
os.path.abspath(os.path.join("/foo/bar", "test")))
)
class TestMemoized(unittest.TestCase):
def test_memoized(self):
class Container:
def _get(self, key):
pass
@utils.memoized
def get(self, key):
return self._get(key)
container = Container()
with unittest.mock.patch.object(
container, "_get", side_effect=lambda x: x
) as get_mock:
self.assertEqual("foo", container.get("foo"))
get_mock.assert_called_once_with("foo")
get_mock.reset_mock()
self.assertEqual("foo", container.get("foo"))
get_mock.assert_not_called()
self.assertEqual("bar", container.get("bar"))
get_mock.assert_called_once_with("bar")
get_mock.reset_mock()
container.get.cache.clear()
self.assertEqual("bar", container.get("bar"))
get_mock.assert_called_once_with("bar")

View file

@ -155,7 +155,9 @@ class memoized:
def __get__(self, obj, objtype):
'''Support instance methods.'''
return partial(self.__call__, obj)
fn = partial(self.__call__, obj)
fn.cache = self.cache
return fn
def deprecated_attribute(old, new, since=None, remove=None, doc=None):