diff options
| author | Stephane Wirtel <stephane@tinyerp.com> | 2008-12-24 01:36:56 +0100 |
|---|---|---|
| committer | Stephane Wirtel <stephane@tinyerp.com> | 2008-12-24 01:36:56 +0100 |
| commit | d2197ffadd4fd72c23a7e701ec9dba47dddb6cb7 (patch) | |
| tree | a4848b42158281239e0d2ea0c7b96078a3372f34 /bin/tools/misc.py | |
| parent | d9be84059db737e015f0154e38a408e8a4c6e28c (diff) | |
| parent | ca93318a771c1032d072702d4d0cea8fb9603b60 (diff) | |
[MERGE]
bzr revid: stephane@tinyerp.com-20081224003656-kwftdnreax7m7hbg
Diffstat (limited to 'bin/tools/misc.py')
| -rw-r--r-- | bin/tools/misc.py | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/bin/tools/misc.py b/bin/tools/misc.py index 993f4eb03f8..6241365f8d0 100644 --- a/bin/tools/misc.py +++ b/bin/tools/misc.py @@ -536,14 +536,34 @@ class cache(object): Use it as a decorator of the function you plan to cache Timeout: 0 = no timeout, otherwise in seconds """ - - def __init__(self, timeout=10000, skiparg=2, multi=None): + + __caches = [] + + def __init__(self, timeout=None, skiparg=2, multi=None): assert skiparg >= 2 # at least self and cr - self.timeout = timeout + if timeout is None: + self.timeout = config['cache_timeout'] + else: + self.timeout = timeout self.skiparg = skiparg self.multi = multi self.lasttime = time.time() self.cache = {} + + cache.__caches.append(self) + + @classmethod + def clean_cache_for_db(cls, dbname): + def get_dbname_from_key(key): + for e in key: + if e[0] == 'dbname': + return e[1] + return None + + for cache in cls.__caches: + keys_to_del = [key for key in cache.cache if get_dbname_from_key(key) == dbname] + for key in keys_to_del: + del cache.cache[key] def __call__(self, fn): arg_names = inspect.getargspec(fn)[0][self.skiparg:] |
