Added Mako report library
[odoo/odoo.git] / bin / mako / cache.py
1 from mako import exceptions
2
3 try:
4     from beaker import cache
5     cache = cache.CacheManager()
6 except ImportError:
7     cache = None
8
9 class Cache(object):
10     def __init__(self, id, starttime):
11         self.id = id
12         self.starttime = starttime
13         self.def_regions = {}
14         
15     def put(self, key, value, **kwargs):
16         defname = kwargs.pop('defname', None)
17         expiretime = kwargs.pop('expiretime', None)
18         createfunc = kwargs.pop('createfunc', None)
19         
20         self._get_cache(defname, **kwargs).put_value(key, starttime=self.starttime, expiretime=expiretime)
21         
22     def get(self, key, **kwargs):
23         defname = kwargs.pop('defname', None)
24         expiretime = kwargs.pop('expiretime', None)
25         createfunc = kwargs.pop('createfunc', None)
26         
27         return self._get_cache(defname, **kwargs).get_value(key, starttime=self.starttime, expiretime=expiretime, createfunc=createfunc)
28         
29     def invalidate(self, key, **kwargs):
30         defname = kwargs.pop('defname', None)
31         expiretime = kwargs.pop('expiretime', None)
32         createfunc = kwargs.pop('createfunc', None)
33         
34         self._get_cache(defname, **kwargs).remove_value(key, starttime=self.starttime, expiretime=expiretime)
35     
36     def invalidate_body(self):
37         self.invalidate('render_body', defname='render_body')
38     
39     def invalidate_def(self, name):
40         self.invalidate('render_%s' % name, defname='render_%s' % name)
41         
42     def invalidate_closure(self, name):
43         self.invalidate(name, defname=name)
44     
45     def _get_cache(self, defname, type=None, **kw):
46         if not cache:
47             raise exceptions.RuntimeException("the Beaker package is required to use cache functionality.")
48         if type == 'memcached':
49             type = 'ext:memcached'
50         if not type:
51             (type, kw) = self.def_regions.get(defname, ('memory', {}))
52         else:
53             self.def_regions[defname] = (type, kw)
54         return cache.get_cache(self.id, type=type, **kw)
55