diff options
author | Gregory P. Smith <greg@mad-scientist.com> | 2007-10-09 07:19:11 (GMT) |
---|---|---|
committer | Gregory P. Smith <greg@mad-scientist.com> | 2007-10-09 07:19:11 (GMT) |
commit | b7de61bf49a6659663f54be6387c3445a40702d4 (patch) | |
tree | 8355b1146e0defb22ad631f1cda87e5c0c32bdbc /Lib/bsddb | |
parent | 10bed54ae2cc7751ba944bc8a99b9ca0a690c06a (diff) | |
download | cpython-b7de61bf49a6659663f54be6387c3445a40702d4.zip cpython-b7de61bf49a6659663f54be6387c3445a40702d4.tar.gz cpython-b7de61bf49a6659663f54be6387c3445a40702d4.tar.bz2 |
Use the highest cPickle protocol in bsddb.dbshelve. This comes from
sourceforge pybsddb patch 1551443 by w_barnes.
Diffstat (limited to 'Lib/bsddb')
-rw-r--r-- | Lib/bsddb/dbshelve.py | 42 |
1 files changed, 28 insertions, 14 deletions
diff --git a/Lib/bsddb/dbshelve.py b/Lib/bsddb/dbshelve.py index d341ab7..077f9c7 100644 --- a/Lib/bsddb/dbshelve.py +++ b/Lib/bsddb/dbshelve.py @@ -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) |