]> git.ipfire.org Git - people/jschlag/pbs.git/blob - backend/cache.py
Add permanent cache for Settings.
[people/jschlag/pbs.git] / backend / cache.py
1 #!/usr/bin/python
2
3 import logging
4 import memcache
5
6 import base
7
8 class Client(memcache.Client):
9 def debuglog(self, str):
10 logging.debug("MemCached: %s" % str)
11
12
13 class Cache(base.Object):
14 key_prefix = "pbs_"
15
16 def __init__(self, pakfire):
17 base.Object.__init__(self, pakfire)
18
19 logging.info("Initializing memcache...")
20
21 # Fetching servers from the database configuration.
22 servers = self.settings.get("memcache_servers", "")
23 self.servers = servers.split()
24
25 logging.info(" Using servers: %s" % ", ".join(self.servers))
26
27 self._memcache = Client(self.servers, debug=1)
28
29 def get(self, key):
30 logging.debug("Querying memcache for: %s" % key)
31
32 key = "".join((self.key_prefix, key))
33
34 return self._memcache.get(key)
35
36 def set(self, key, val, time=60, min_compress_len=0):
37 key = "".join((self.key_prefix, key))
38
39 return self._memcache.set(key, val, time=time,
40 min_compress_len=min_compress_len)
41
42 def delete(self, key, time=0):
43 key = "".join((self.key_prefix, key))
44
45 return self._memcache.delete(key, time=time)
46
47
48 class PermanentCache(base.Object):
49 __items = {}
50
51 def has_key(self, key):
52 return self.__items.has_key(key)
53
54 def get(self, key, default=None):
55 return self.__items.get(key, default)
56
57 def set(self, key, val):
58 self.__items[key] = val
59
60 def delete(self, key):
61 if self.__items.has_key(key):
62 del self.__items[key]