]> granicus.if.org Git - python/commitdiff
Use the highest cPickle protocol in bsddb.dbshelve. This comes from
authorGregory P. Smith <greg@mad-scientist.com>
Tue, 9 Oct 2007 07:19:11 +0000 (07:19 +0000)
committerGregory P. Smith <greg@mad-scientist.com>
Tue, 9 Oct 2007 07:19:11 +0000 (07:19 +0000)
sourceforge pybsddb patch 1551443 by w_barnes.

Lib/bsddb/dbshelve.py

index d341ab791092cb3c50c0efc11e7da8419f5a2ef5..077f9c7a9fc9b6f80313526cd14cf842735d1542 100644 (file)
@@ -30,12 +30,21 @@ storage.
 #------------------------------------------------------------------------
 
 import cPickle
-try:
+import db
+import sys
+
+#At version 2.3 cPickle switched to using protocol instead of bin and
+#DictMixin was added
+if sys.version_info[:3] >= (2, 3, 0):
+    HIGHEST_PROTOCOL = cPickle.HIGHEST_PROTOCOL
+    def _dumps(object, protocol):
+        return cPickle.dumps(object, protocol=protocol)
     from UserDict import DictMixin
-except ImportError:
-    # DictMixin is new in Python 2.3
+else:
+    HIGHEST_PROTOCOL = None
+    def _dumps(object, protocol):
+        return cPickle.dumps(object, bin=protocol)
     class DictMixin: pass
-import db
 
 #------------------------------------------------------------------------
 
@@ -81,7 +90,10 @@ class DBShelf(DictMixin):
     """
     def __init__(self, dbenv=None):
         self.db = db.DB(dbenv)
-        self.binary = 1
+        if HIGHEST_PROTOCOL:
+            self.protocol = HIGHEST_PROTOCOL
+        else:
+            self.protocol = 1
 
 
     def __del__(self):
@@ -108,7 +120,7 @@ class DBShelf(DictMixin):
 
 
     def __setitem__(self, key, value):
-        data = cPickle.dumps(value, self.binary)
+        data = _dumps(value, self.protocol)
         self.db[key] = data
 
 
@@ -146,7 +158,7 @@ class DBShelf(DictMixin):
     # Other methods
 
     def __append(self, value, txn=None):
-        data = cPickle.dumps(value, self.binary)
+        data = _dumps(value, self.protocol)
         return self.db.append(data, txn)
 
     def append(self, value, txn=None):
@@ -177,19 +189,19 @@ class DBShelf(DictMixin):
                          # so it doesn't need unpickled.
 
     def get_both(self, key, value, txn=None, flags=0):
-        data = cPickle.dumps(value, self.binary)
+        data = _dumps(value, self.protocol)
         data = self.db.get(key, data, txn, flags)
         return cPickle.loads(data)
 
 
     def cursor(self, txn=None, flags=0):
         c = DBShelfCursor(self.db.cursor(txn, flags))
-        c.binary = self.binary
+        c.protocol = self.protocol
         return c
 
 
     def put(self, key, value, txn=None, flags=0):
-        data = cPickle.dumps(value, self.binary)
+        data = _dumps(value, self.protocol)
         return self.db.put(key, data, txn, flags)
 
 
@@ -225,11 +237,13 @@ class DBShelfCursor:
     #----------------------------------------------
 
     def dup(self, flags=0):
-        return DBShelfCursor(self.dbc.dup(flags))
+        c = DBShelfCursor(self.dbc.dup(flags))
+        c.protocol = self.protocol
+        return c
 
 
     def put(self, key, value, flags=0):
-        data = cPickle.dumps(value, self.binary)
+        data = _dumps(value, self.protocol)
         return self.dbc.put(key, data, flags)
 
 
@@ -247,7 +261,7 @@ class DBShelfCursor:
         return self._extract(rec)
 
     def get_3(self, key, value, flags):
-        data = cPickle.dumps(value, self.binary)
+        data = _dumps(value, self.protocol)
         rec = self.dbc.get(key, flags)
         return self._extract(rec)
 
@@ -264,7 +278,7 @@ class DBShelfCursor:
 
 
     def get_both(self, key, value, flags=0):
-        data = cPickle.dumps(value, self.binary)
+        data = _dumps(value, self.protocol)
         rec = self.dbc.get_both(key, flags)
         return self._extract(rec)