Skip to content
Snippets Groups Projects
Commit e3f00750 authored by Massimiliano Culpo's avatar Massimiliano Culpo Committed by Peter Scheibel
Browse files

Update llnl.util.lang.memoized so that Sphinx can extract signature (#11055)

Replace the original implementation of the "memoized" decorator with
an implementation that exposes the docstring and arguments of the
wrapped function. This is achieved using functools.wraps.
parent def5b237
Branches
Tags
No related merge requests found
......@@ -168,30 +168,24 @@ def union_dicts(*dicts):
return result
class memoized(object):
"""Decorator that caches the results of a function, storing them
in an attribute of that function."""
def __init__(self, func):
self.func = func
self.cache = {}
def memoized(func):
"""Decorator that caches the results of a function, storing them in
an attribute of that function.
"""
func.cache = {}
def __call__(self, *args):
@functools.wraps(func)
def _memoized_function(*args):
if not isinstance(args, collections.Hashable):
# Not hashable, so just call the function.
return self.func(*args)
return func(*args)
if args not in self.cache:
self.cache[args] = self.func(*args)
return self.cache[args]
if args not in func.cache:
func.cache[args] = func(*args)
def __get__(self, obj, objtype):
"""Support instance methods."""
return functools.partial(self.__call__, obj)
return func.cache[args]
def clear(self):
"""Expunge cache so that self.func will be called again."""
self.cache.clear()
return _memoized_function
def list_modules(directory, **kwargs):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment