← Back to team overview

openerp-dev-web team mailing list archive

[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