From f2fbfc4b6ee3f90db87358e03d2473c715c74670 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner <inform@tiker.net> Date: Wed, 10 Jul 2013 09:02:48 -0500 Subject: [PATCH] Support kwargs in memoize_method --- pytools/__init__.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/pytools/__init__.py b/pytools/__init__.py index bb3412a..8be65a6 100644 --- a/pytools/__init__.py +++ b/pytools/__init__.py @@ -375,21 +375,29 @@ def memoize(func, *args): FunctionValueCache = memoize +class _HasKwargs(object): + pass + def memoize_method(method): """Supports cache deletion via ``method_name.clear_cache(self)``.""" cache_dict_name = intern("_memoize_dic_"+method.__name__) - def wrapper(self, *args): + def wrapper(self, *args, **kwargs): + if kwargs: + key = (_HasKwargs, frozenset(kwargs.iteritems())) + args + else: + key = args + try: - return getattr(self, cache_dict_name)[args] + return getattr(self, cache_dict_name)[key] except AttributeError: - result = method(self, *args) - setattr(self, cache_dict_name, {args: result}) + result = method(self, *args, **kwargs) + setattr(self, cache_dict_name, {key: result}) return result except KeyError: - result = method(self, *args) - getattr(self, cache_dict_name)[args] = result + result = method(self, *args, **kwargs) + getattr(self, cache_dict_name)[key] = result return result def clear_cache(self): -- GitLab