summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1995-08-11 14:19:16 (GMT)
committerGuido van Rossum <guido@python.org>1995-08-11 14:19:16 (GMT)
commitabad1cc647a9c8e892829f8066dc85ad3b7c9632 (patch)
treeea2ab3fd87bb2aff5daf85c78327c605c5006337
parente03a86c3d90a3cc81c5985f22000c7ecf7396135 (diff)
downloadcpython-abad1cc647a9c8e892829f8066dc85ad3b7c9632.zip
cpython-abad1cc647a9c8e892829f8066dc85ad3b7c9632.tar.gz
cpython-abad1cc647a9c8e892829f8066dc85ad3b7c9632.tar.bz2
renamed DbShelf->DbfilenameShelf;added BsdDbShelf (David Ely)
-rw-r--r--Lib/shelve.py51
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)