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