2 The cache object API for implementing caches. The default is just a
3 dictionary, which in turns means it is not threadsafe for writing.
10 from hashlib import md5
11 from pickle import load, dump
12 from threading import Lock
14 from .filelock import FileLock
20 raise NotImplemented()
22 def set(self, key, value):
23 raise NotImplemented()
25 def delete(self, key):
26 raise NotImplemented()
29 class DictCache(BaseCache):
31 def __init__(self, init_dict=None):
33 self.data = init_dict or {}
36 return self.data.get(key, None)
38 def set(self, key, value):
40 self.data.update({key: value})
42 def delete(self, key):
50 def __init__(self, directory, forever=False):
51 self.directory = directory
52 self.forever = forever
54 if not os.path.isdir(self.directory):
55 os.mkdir(self.directory)
58 return md5(x.encode('utf-8')).hexdigest()
61 return os.path.join(self.directory, self.encode(name))
65 if os.path.exists(name):
66 return load(codecs.open(name, 'rb'))
68 def set(self, key, value):
71 with codecs.open(name, 'w+b') as fh:
74 def delete(self, key):
76 os.remove(self._fn(key))