2 Author: Oleg Broytman <phd@phd.pp.ru>
3 Copyright (C) 2001-2003 PhiloSoft Design
7 from shelve import DbfilenameShelf
8 from zlib import compress, decompress
11 from cPickle import dumps, loads
13 from Pickle import dumps, loads
16 class CompressedShelf(DbfilenameShelf):
17 """Shelf implementation using zlib for compressing data."""
19 compress_level = 6 # default compression
21 def __getitem__(self, key):
22 return loads(decompress(self.dict[key]))
24 def __setitem__(self, key, value):
25 self.dict[key] = compress(dumps(value), self.compress_level)
28 class CompressedKeysShelf(CompressedShelf):
29 """CompressedShelf implementation that also compresses keys."""
33 for key in self.dict.keys():
34 _keys.append(decompress(key))
37 def has_key(self, key):
38 return self.dict.has_key(compress(key, self.compress_level))
40 def __getitem__(self, key):
41 return CompressedShelf.__getitem__(self, compress(key, self.compress_level))
43 def __setitem__(self, key, value):
44 CompressedShelf.__setitem__(self, compress(key, self.compress_level), value)
46 def __delitem__(self, key):
47 del self.dict[compress(key, self.compress_level)]