759e5e0fcf9d60c498809e88e1073a7d58a67243
[tiramisu.git] / tiramisu / storage / dictionary / storage.py
1 # -*- coding: utf-8 -*-
2 "default plugin for cache: set it in a simple dictionary"
3 # Copyright (C) 2013 Team tiramisu (see AUTHORS for all contributors)
4 #
5 # This program is free software; you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 2 of the License, or
8 # (at your option) any later version.
9 #
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 # GNU General Public License for more details.
14 #
15 # You should have received a copy of the GNU General Public License
16 # along with this program; if not, write to the Free Software
17 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18 #
19 # ____________________________________________________________
20
21
22 from tiramisu.i18n import _
23 from tiramisu.error import ConfigError
24
25
26 def enumerate():
27     return []
28
29
30 def delete(session_id):
31     raise ConfigError(_('dictionary storage cannot delete session'))
32
33
34 class Storage(object):
35     __slots__ = tuple()
36     storage = 'dictionary'
37
38     def __init__(self, session_id, is_persistent):
39         if is_persistent:
40             raise ValueError(_('a dictionary cannot be persistent'))
41
42
43 class Cache(object):
44     __slots__ = ('_cache',)
45     key_is_path = False
46
47     def __init__(self):
48         self._cache = {}
49
50     def setcache(self, cache_type, path, val, time):
51         self._cache[path] = (val, time)
52
53     def getcache(self, cache_type, path, exp):
54         value, created = self._cache[path]
55         if exp < created:
56             return True, value
57         return False, None
58
59     def hascache(self, cache_type, path):
60         """ path is in the cache
61
62         :param cache_type: value | property
63         :param path: the path's option
64         """
65         return path in self._cache
66
67     def reset_expired_cache(self, cache_type, exp):
68         keys = self._cache.keys()
69         for key in keys:
70             val, created = self._cache[key]
71             if exp > created:
72                 del(self._cache[key])
73
74     def reset_all_cache(self, cache_type):
75         "empty the cache"
76         self._cache.clear()
77
78     def get_cached(self, cache_type, context):
79         """return all values in a dictionary
80         example: {'path1': ('value1', 'time1'), 'path2': ('value2', 'time2')}
81         """
82         return self._cache