mirror of
https://github.com/python/cpython.git
synced 2025-12-04 16:43:27 +00:00
Use the highest cPickle protocol in bsddb.dbshelve. This comes from
sourceforge pybsddb patch 1551443 by w_barnes.
This commit is contained in:
parent
10bed54ae2
commit
b7de61bf49
1 changed files with 29 additions and 15 deletions
|
|
@ -30,12 +30,21 @@ storage.
|
||||||
#------------------------------------------------------------------------
|
#------------------------------------------------------------------------
|
||||||
|
|
||||||
import cPickle
|
import cPickle
|
||||||
try:
|
|
||||||
from UserDict import DictMixin
|
|
||||||
except ImportError:
|
|
||||||
# DictMixin is new in Python 2.3
|
|
||||||
class DictMixin: pass
|
|
||||||
import db
|
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
|
||||||
|
else:
|
||||||
|
HIGHEST_PROTOCOL = None
|
||||||
|
def _dumps(object, protocol):
|
||||||
|
return cPickle.dumps(object, bin=protocol)
|
||||||
|
class DictMixin: pass
|
||||||
|
|
||||||
#------------------------------------------------------------------------
|
#------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
@ -81,7 +90,10 @@ class DBShelf(DictMixin):
|
||||||
"""
|
"""
|
||||||
def __init__(self, dbenv=None):
|
def __init__(self, dbenv=None):
|
||||||
self.db = db.DB(dbenv)
|
self.db = db.DB(dbenv)
|
||||||
self.binary = 1
|
if HIGHEST_PROTOCOL:
|
||||||
|
self.protocol = HIGHEST_PROTOCOL
|
||||||
|
else:
|
||||||
|
self.protocol = 1
|
||||||
|
|
||||||
|
|
||||||
def __del__(self):
|
def __del__(self):
|
||||||
|
|
@ -108,7 +120,7 @@ class DBShelf(DictMixin):
|
||||||
|
|
||||||
|
|
||||||
def __setitem__(self, key, value):
|
def __setitem__(self, key, value):
|
||||||
data = cPickle.dumps(value, self.binary)
|
data = _dumps(value, self.protocol)
|
||||||
self.db[key] = data
|
self.db[key] = data
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -146,7 +158,7 @@ class DBShelf(DictMixin):
|
||||||
# Other methods
|
# Other methods
|
||||||
|
|
||||||
def __append(self, value, txn=None):
|
def __append(self, value, txn=None):
|
||||||
data = cPickle.dumps(value, self.binary)
|
data = _dumps(value, self.protocol)
|
||||||
return self.db.append(data, txn)
|
return self.db.append(data, txn)
|
||||||
|
|
||||||
def append(self, value, txn=None):
|
def append(self, value, txn=None):
|
||||||
|
|
@ -177,19 +189,19 @@ class DBShelf(DictMixin):
|
||||||
# so it doesn't need unpickled.
|
# so it doesn't need unpickled.
|
||||||
|
|
||||||
def get_both(self, key, value, txn=None, flags=0):
|
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)
|
data = self.db.get(key, data, txn, flags)
|
||||||
return cPickle.loads(data)
|
return cPickle.loads(data)
|
||||||
|
|
||||||
|
|
||||||
def cursor(self, txn=None, flags=0):
|
def cursor(self, txn=None, flags=0):
|
||||||
c = DBShelfCursor(self.db.cursor(txn, flags))
|
c = DBShelfCursor(self.db.cursor(txn, flags))
|
||||||
c.binary = self.binary
|
c.protocol = self.protocol
|
||||||
return c
|
return c
|
||||||
|
|
||||||
|
|
||||||
def put(self, key, value, txn=None, flags=0):
|
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)
|
return self.db.put(key, data, txn, flags)
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -225,11 +237,13 @@ class DBShelfCursor:
|
||||||
#----------------------------------------------
|
#----------------------------------------------
|
||||||
|
|
||||||
def dup(self, flags=0):
|
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):
|
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)
|
return self.dbc.put(key, data, flags)
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -247,7 +261,7 @@ class DBShelfCursor:
|
||||||
return self._extract(rec)
|
return self._extract(rec)
|
||||||
|
|
||||||
def get_3(self, key, value, flags):
|
def get_3(self, key, value, flags):
|
||||||
data = cPickle.dumps(value, self.binary)
|
data = _dumps(value, self.protocol)
|
||||||
rec = self.dbc.get(key, flags)
|
rec = self.dbc.get(key, flags)
|
||||||
return self._extract(rec)
|
return self._extract(rec)
|
||||||
|
|
||||||
|
|
@ -264,7 +278,7 @@ class DBShelfCursor:
|
||||||
|
|
||||||
|
|
||||||
def get_both(self, key, value, flags=0):
|
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)
|
rec = self.dbc.get_both(key, flags)
|
||||||
return self._extract(rec)
|
return self._extract(rec)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue