[Python-checkins] r58386 - python/trunk/Lib/bsddb/dbshelve.py

gregory.p.smith python-checkins at python.org
Tue Oct 9 09:19:11 CEST 2007


Author: gregory.p.smith
Date: Tue Oct  9 09:19:11 2007
New Revision: 58386

Modified:
   python/trunk/Lib/bsddb/dbshelve.py
Log:
Use the highest cPickle protocol in bsddb.dbshelve.  This comes from
sourceforge pybsddb patch 1551443 by w_barnes.


Modified: python/trunk/Lib/bsddb/dbshelve.py
==============================================================================
--- python/trunk/Lib/bsddb/dbshelve.py	(original)
+++ python/trunk/Lib/bsddb/dbshelve.py	Tue Oct  9 09:19:11 2007
@@ -30,12 +30,21 @@
 #------------------------------------------------------------------------
 
 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 @@
     """
     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 @@
 
 
     def __setitem__(self, key, value):
-        data = cPickle.dumps(value, self.binary)
+        data = _dumps(value, self.protocol)
         self.db[key] = data
 
 
@@ -146,7 +158,7 @@
     # 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 @@
                          # 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 @@
     #----------------------------------------------
 
     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 @@
         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 @@
 
 
     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)
 


More information about the Python-checkins mailing list