aboutsummaryrefslogtreecommitdiffstats
path: root/python/analytics/utils.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/analytics/utils.py')
-rw-r--r--python/analytics/utils.py28
1 files changed, 16 insertions, 12 deletions
diff --git a/python/analytics/utils.py b/python/analytics/utils.py
index fab94397..0100f5bc 100644
--- a/python/analytics/utils.py
+++ b/python/analytics/utils.py
@@ -102,15 +102,19 @@ def build_table(rows, format_strings, row_format):
return r
-def memoize(f):
- @wraps(f)
- def cached_f(*args, **kwargs):
- obj = args[0]
- key = (f.__name__, hash(args))
- if key in obj._cache:
- return obj._cache[key]
- else:
- v = f(*args, **kwargs)
- obj._cache[key] = v
- return v
- return cached_f
+def memoize(hasher=lambda args: (hash(args),)):
+
+ def memoize_(f):
+ @wraps(f)
+ def cached_f(*args, **kwargs):
+ self = args[0]
+ key = (f.__name__, *hasher(args))
+ if key in self._cache:
+ return self._cache[key]
+ else:
+ v = f(*args, **kwargs)
+ self._cache[key] = v
+ return v
+ return cached_f
+
+ return memoize_