From b34691c2f67968a38f310047f59df0612db18c6c Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Fri, 14 Aug 2009 17:05:06 +0200 Subject: [PATCH] [FIX] bug in cache system that altered some arguments passed to cached function lp bug: https://launchpad.net/bugs/413586 fixed bzr revid: christophe@tinyerp.com-20090814150506-04f3uficgdtd3uqu --- bin/tools/misc.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/bin/tools/misc.py b/bin/tools/misc.py index 9d4ea4d66cd..d67cde3ec79 100644 --- a/bin/tools/misc.py +++ b/bin/tools/misc.py @@ -599,9 +599,16 @@ class cache(object): """ def to_tuple(d): - i = d.items() - i.sort(key=lambda (x,y): x) - return tuple(i) + pairs = d.items() + pairs.sort(key=lambda (k,v): k) + for i, (k, v) in enumerate(pairs): + if isinstance(v, dict): + pairs[i] = (k, to_tuple(v)) + if isinstance(v, (list, set)): + pairs[i] = (k, tuple(v)) + elif not is_hashable(v): + pairs[i] = (k, repr(v)) + return tuple(pairs) if not self.multi: key = (('dbname', dbname),) + to_tuple(kwargs2) @@ -618,12 +625,6 @@ class cache(object): kwargs2 = self.fun_default_values.copy() kwargs2.update(kwargs) kwargs2.update(dict(zip(self.fun_arg_names, args[self.skiparg-2:]))) - for k in kwargs2: - if isinstance(kwargs2[k], (list, dict, set)): - kwargs2[k] = tuple(kwargs2[k]) - elif not is_hashable(kwargs2[k]): - kwargs2[k] = repr(kwargs2[k]) - return kwargs2 def clear(self, dbname, *args, **kwargs):