Guido van Rossum | a48061a | 1995-01-10 00:31:14 +0000 | [diff] [blame] | 1 | """Manage shelves of pickled objects.""" |
| 2 | |
| 3 | import pickle |
| 4 | import StringIO |
| 5 | |
| 6 | class Shelf: |
| 7 | |
| 8 | def __init__(self, dict): |
| 9 | self.dict = dict |
| 10 | |
| 11 | def keys(self): |
| 12 | return self.dict.keys() |
| 13 | |
| 14 | def __len__(self): |
| 15 | return self.dict.len() |
| 16 | |
| 17 | def has_key(self, key): |
| 18 | return self.dict.has_key(key) |
| 19 | |
| 20 | def __getitem__(self, key): |
| 21 | return pickle.Unpickler(StringIO.StringIO(self.dict[key])).load() |
| 22 | |
| 23 | def __setitem__(self, key, value): |
| 24 | f = StringIO.StringIO() |
| 25 | p = pickle.Pickler(f) |
| 26 | p.dump(value) |
| 27 | self.dict[key] = f.getvalue() |
| 28 | |
| 29 | def __delitem__(self, key): |
| 30 | del self.dict[key] |
| 31 | |
| 32 | def close(self): |
| 33 | self.db.close() |
| 34 | self.db = None |
| 35 | |
| 36 | class DbShelf(Shelf): |
| 37 | |
| 38 | def __init__(self, file): |
| 39 | import anydbm |
| 40 | Shelf.__init__(self, anydbm.open(file)) |
| 41 | |
| 42 | def open(file): |
| 43 | return DbShelf(file) |