]> git.phdru.name Git - m_lib.git/blob - m_lib/hash/zshelve.py
Remove wrong copyright lines, fix module docstrings
[m_lib.git] / m_lib / hash / zshelve.py
1 """Compressed shelves"""
2
3 from shelve import DbfilenameShelf
4 from zlib import compress, decompress
5
6 try:
7    from cPickle import dumps, loads
8 except ImportError:
9    from Pickle import dumps, loads
10
11
12 class CompressedShelf(DbfilenameShelf):
13     """Shelf implementation using zlib for compressing data."""
14
15     compress_level = 6 # default compression
16
17     def __getitem__(self, key):
18         return loads(decompress(self.dict[key]))
19
20     def __setitem__(self, key, value):
21         self.dict[key] = compress(dumps(value), self.compress_level)
22
23
24 class CompressedKeysShelf(CompressedShelf):
25     """CompressedShelf implementation that also compresses keys."""
26
27     def keys(self):
28         _keys = []
29         for key in self.dict.keys():
30             _keys.append(decompress(key))
31         return _keys
32
33     def has_key(self, key):
34         return self.dict.has_key(compress(key, self.compress_level))
35
36     def __getitem__(self, key):
37         return CompressedShelf.__getitem__(self, compress(key, self.compress_level))
38
39     def __setitem__(self, key, value):
40         CompressedShelf.__setitem__(self, compress(key, self.compress_level), value)
41
42     def __delitem__(self, key):
43         del self.dict[compress(key, self.compress_level)]