1 """Compressed shelves"""
3 from shelve import DbfilenameShelf
4 from zlib import compress, decompress
7 from cPickle import dumps, loads
9 from Pickle import dumps, loads
12 class CompressedShelf(DbfilenameShelf):
13 """Shelf implementation using zlib for compressing data."""
15 compress_level = 6 # default compression
17 def __getitem__(self, key):
18 return loads(decompress(self.dict[key]))
20 def __setitem__(self, key, value):
21 self.dict[key] = compress(dumps(value), self.compress_level)
24 class CompressedKeysShelf(CompressedShelf):
25 """CompressedShelf implementation that also compresses keys."""
29 for key in self.dict.keys():
30 _keys.append(decompress(key))
33 def has_key(self, key):
34 return self.dict.has_key(compress(key, self.compress_level))
36 def __getitem__(self, key):
37 return CompressedShelf.__getitem__(self, compress(key, self.compress_level))
39 def __setitem__(self, key, value):
40 CompressedShelf.__setitem__(self, compress(key, self.compress_level), value)
42 def __delitem__(self, key):
43 del self.dict[compress(key, self.compress_level)]