diff options
author | Guido van Rossum <guido@python.org> | 1995-08-11 14:19:16 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1995-08-11 14:19:16 (GMT) |
commit | abad1cc647a9c8e892829f8066dc85ad3b7c9632 (patch) | |
tree | ea2ab3fd87bb2aff5daf85c78327c605c5006337 /Lib | |
parent | e03a86c3d90a3cc81c5985f22000c7ecf7396135 (diff) | |
download | cpython-abad1cc647a9c8e892829f8066dc85ad3b7c9632.zip cpython-abad1cc647a9c8e892829f8066dc85ad3b7c9632.tar.gz cpython-abad1cc647a9c8e892829f8066dc85ad3b7c9632.tar.bz2 |
renamed DbShelf->DbfilenameShelf;added BsdDbShelf (David Ely)
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/shelve.py | 51 |
1 files changed, 46 insertions, 5 deletions
diff --git a/Lib/shelve.py b/Lib/shelve.py index fcd52ec..18aa905 100644 --- a/Lib/shelve.py +++ b/Lib/shelve.py @@ -73,23 +73,64 @@ class Shelf: self.close() -class DbShelf(Shelf): +class BsdDbShelf(Shelf): + """Shelf implementation using the "BSD" db interface. + + The actual database is opened using one of thethe "bsddb" modules + "open" routines (i.e. bsddb.hashopen, bsddb.btopen or bsddb.rnopen.) + + This class is initialized with the the database object + returned from one of the bsddb open functions. + + See the module's __doc__ string for an overview of the interface. + """ + + def __init__(self, dict): + Shelf.__init__(self, dict) + + def set_location(self, key): + (key, value) = self.dict.set_location(key) + f = StringIO.StringIO(value) + return (key, pickle.Unpickler(f).load()) + + def next(self): + (key, value) = self.dict.next() + f = StringIO.StringIO(value) + return (key, pickle.Unpickler(f).load()) + + def previous(self): + (key, value) = self.dict.previous() + f = StringIO.StringIO(value) + return (key, pickle.Unpickler(f).load()) + + def first(self): + (key, value) = self.dict.first() + f = StringIO.StringIO(value) + return (key, pickle.Unpickler(f).load()) + + def last(self): + (key, value) = self.dict.last() + f = StringIO.StringIO(value) + return (key, pickle.Unpickler(f).load()) + + +class DbfilenameShelf(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, filename): + def __init__(self, filename, flag='c'): import anydbm - Shelf.__init__(self, anydbm.open(filename)) + Shelf.__init__(self, anydbm.open(filename, flag)) -def open(filename): +def open(filename, flag='c'): """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) + return DbfilenameShelf(filename, flag) |