diff options
author | Guido van Rossum <guido@python.org> | 1995-02-09 17:18:10 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1995-02-09 17:18:10 (GMT) |
commit | cc6764c1ba92e947638d1c0c8fe8d312a0e3e6d4 (patch) | |
tree | def2cce7cbaf33886f5780d086bcdf093951342c /Lib/shelve.py | |
parent | 6de668f3aa4acb93c0e54be12af4d23adb95370a (diff) | |
download | cpython-cc6764c1ba92e947638d1c0c8fe8d312a0e3e6d4.zip cpython-cc6764c1ba92e947638d1c0c8fe8d312a0e3e6d4.tar.gz cpython-cc6764c1ba92e947638d1c0c8fe8d312a0e3e6d4.tar.bz2 |
added __doc__ strings etc.
Diffstat (limited to 'Lib/shelve.py')
-rw-r--r-- | Lib/shelve.py | 66 |
1 files changed, 59 insertions, 7 deletions
diff --git a/Lib/shelve.py b/Lib/shelve.py index b90e641..a7f289f 100644 --- a/Lib/shelve.py +++ b/Lib/shelve.py @@ -1,9 +1,43 @@ -"""Manage shelves of pickled objects.""" +"""Manage shelves of pickled objects. + +A "shelf" is a persistent, dictionary-like object. The difference +with dbm databases is that the values (not the keys!) in a shelf can +be essentially arbitrary Python objects -- anything that the "pickle" +module can handle. This includes most class instances, recursive data +types, and objects containing lots of shared sub-objects. The keys +are ordinary strings. + +To summarize the interface (key is a string, data is an arbitrary +object): + + import shelve + d = shelve.open(filename) # open, with (g)dbm filename + + d[key] = data # store data at key (overwrites old data if + # using an existing key) + data = d[key] # retrieve data at key (raise KeyError if no + # such key) + del d[key] # delete data stored at key (raises KeyError + # if no such key) + flag = d.has_key(key) # true if the key exists + list = d.keys() # a list of all existing keys (slow!) + + d.close() # close it + +Dependent on the implementation, closing a persistent dictionary may +or may not be necessary to flush changes to disk. +""" import pickle import StringIO + class Shelf: + """Base class for shelf implementations. + + This is initialized with a dictionary-like object. + See the module's __doc__ string for an overview of the interface. + """ def __init__(self, dict): self.dict = dict @@ -18,7 +52,8 @@ class Shelf: return self.dict.has_key(key) def __getitem__(self, key): - return pickle.Unpickler(StringIO.StringIO(self.dict[key])).load() + f = StringIO.StringIO(self.dict[key]) + return pickle.Unpickler(f).load() def __setitem__(self, key, value): f = StringIO.StringIO() @@ -30,14 +65,31 @@ class Shelf: del self.dict[key] def close(self): - self.db.close() + if hasattr(self.db, 'close'): + self.db.close() self.db = None + def __del__(self): + self.close() + + class DbShelf(Shelf): + """Shelf implementation using the "anydbm" generic dbm interface. + + This is initialized with the filename for the dbm database. + See the module's __doc__ string for an overview of the interface. + """ - def __init__(self, file): + def __init__(self, filename): import anydbm - Shelf.__init__(self, anydbm.open(file)) + Shelf.__init__(self, anydbm.open(filename)) -def open(file): - return DbShelf(file) + +def open(filename): + """Open a persistent dictionary for reading and writing. + + Argument is the filename for the dbm database. + See the module's __doc__ string for an overview of the interface. + """ + + return DbShelf(filename) |