openerp-dev-web team mailing list archive
-
openerp-dev-web team
-
Mailing list archive
-
Message #02526
[Merge] lp:~kangol/openobject-client-web/cache-lru into lp:openobject-client-web
Christophe (OpenERP) has proposed merging lp:~kangol/openobject-client-web/cache-lru into lp:openobject-client-web.
Requested reviews:
OpenERP SA's Web Client R&D (openerp-dev-web)
For more details, see:
https://code.launchpad.net/~kangol/openobject-client-web/cache-lru/+merge/46679
--
https://code.launchpad.net/~kangol/openobject-client-web/cache-lru/+merge/46679
Your team OpenERP SA's Web Client R&D is requested to review the proposed merge of lp:~kangol/openobject-client-web/cache-lru into lp:openobject-client-web.
=== modified file 'addons/openerp/controllers/viewed.py'
--- addons/openerp/controllers/viewed.py 2011-01-17 11:57:11 +0000
+++ addons/openerp/controllers/viewed.py 2011-01-18 20:53:38 +0000
@@ -504,7 +504,7 @@
try:
cache.clear()
- except:
+ except Exception:
pass
return dict(record=record, error=error)
@@ -519,7 +519,7 @@
try:
cache.clear()
- except:
+ except Exception:
pass
return dict()
@@ -609,7 +609,7 @@
try:
cache.clear()
- except:
+ except Exception:
pass
return dict(record=record)
=== modified file 'addons/openerp/utils/cache.py'
--- addons/openerp/utils/cache.py 2011-01-17 11:57:11 +0000
+++ addons/openerp/utils/cache.py 2011-01-18 20:53:38 +0000
@@ -20,17 +20,17 @@
###############################################################################
import copy
import cPickle
+import functools
import cherrypy
+from mako.util import LRUCache
import rpc
-__cache = {}
+__cache = LRUCache(cherrypy.config.get('server.db_cache_size', 8))
def clear():
- queue, store = __cache.setdefault(rpc.session.db, ([], {}))
- while queue:
- del store[queue.pop()]
+ __cache.pop(rpc.session.db, None)
def memoize(limit=100, force=False):
@@ -40,24 +40,15 @@
if not force and cherrypy.config.get('server.environment') == 'development':
return func
+ functools.wraps(func)
def func_wrapper(*args, **kwargs):
-
- queue, store = __cache.setdefault(rpc.session.db, ([], {}))
-
+ store = __cache.setdefault(rpc.session.db, LRUCache(limit))
key = cPickle.dumps((args, kwargs))
- try:
- queue.append(queue.pop(queue.index(key)))
- except ValueError:
+ if key not in store:
store[key] = func(*args, **kwargs)
- queue.append(key)
- if limit is not None and len(queue) > limit:
- del store[queue.pop(0)]
-
return copy.deepcopy(store[key])
- func_wrapper.func_name = func.func_name
return func_wrapper
-
return memoize_wrapper
@memoize(1000)
Follow ups