mirror of
https://github.com/python/cpython.git
synced 2025-10-21 14:12:27 +00:00
Use cPickle and cStringIO when available.
This commit is contained in:
parent
f668d17e01
commit
914c938cc5
1 changed files with 30 additions and 20 deletions
|
@ -28,8 +28,17 @@ Dependent on the implementation, closing a persistent dictionary may
|
||||||
or may not be necessary to flush changes to disk.
|
or may not be necessary to flush changes to disk.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pickle
|
# Try using cPickle and cStringIO if available.
|
||||||
import StringIO
|
|
||||||
|
try:
|
||||||
|
from cPickle import Pickler, Unpickler
|
||||||
|
except ImportError:
|
||||||
|
from pickle import Pickler, Unpickler
|
||||||
|
|
||||||
|
try:
|
||||||
|
from cStringIO import StringIO
|
||||||
|
except ImportError:
|
||||||
|
from StringIO import StringIO
|
||||||
|
|
||||||
|
|
||||||
class Shelf:
|
class Shelf:
|
||||||
|
@ -52,12 +61,12 @@ class Shelf:
|
||||||
return self.dict.has_key(key)
|
return self.dict.has_key(key)
|
||||||
|
|
||||||
def __getitem__(self, key):
|
def __getitem__(self, key):
|
||||||
f = StringIO.StringIO(self.dict[key])
|
f = StringIO(self.dict[key])
|
||||||
return pickle.Unpickler(f).load()
|
return Unpickler(f).load()
|
||||||
|
|
||||||
def __setitem__(self, key, value):
|
def __setitem__(self, key, value):
|
||||||
f = StringIO.StringIO()
|
f = StringIO()
|
||||||
p = pickle.Pickler(f)
|
p = Pickler(f)
|
||||||
p.dump(value)
|
p.dump(value)
|
||||||
self.dict[key] = f.getvalue()
|
self.dict[key] = f.getvalue()
|
||||||
|
|
||||||
|
@ -80,11 +89,12 @@ class Shelf:
|
||||||
class BsdDbShelf(Shelf):
|
class BsdDbShelf(Shelf):
|
||||||
"""Shelf implementation using the "BSD" db interface.
|
"""Shelf implementation using the "BSD" db interface.
|
||||||
|
|
||||||
The actual database is opened using one of thethe "bsddb" modules
|
This adds methods first(), next(), previous(), last() and
|
||||||
"open" routines (i.e. bsddb.hashopen, bsddb.btopen or bsddb.rnopen.)
|
set_location() that have no counterpart in [g]dbm databases.
|
||||||
|
|
||||||
This class is initialized with the the database object
|
The actual database must be opened using one of the "bsddb"
|
||||||
returned from one of the bsddb open functions.
|
modules "open" routines (i.e. bsddb.hashopen, bsddb.btopen or
|
||||||
|
bsddb.rnopen) and passed to the constructor.
|
||||||
|
|
||||||
See the module's __doc__ string for an overview of the interface.
|
See the module's __doc__ string for an overview of the interface.
|
||||||
"""
|
"""
|
||||||
|
@ -94,28 +104,28 @@ class BsdDbShelf(Shelf):
|
||||||
|
|
||||||
def set_location(self, key):
|
def set_location(self, key):
|
||||||
(key, value) = self.dict.set_location(key)
|
(key, value) = self.dict.set_location(key)
|
||||||
f = StringIO.StringIO(value)
|
f = StringIO(value)
|
||||||
return (key, pickle.Unpickler(f).load())
|
return (key, Unpickler(f).load())
|
||||||
|
|
||||||
def next(self):
|
def next(self):
|
||||||
(key, value) = self.dict.next()
|
(key, value) = self.dict.next()
|
||||||
f = StringIO.StringIO(value)
|
f = StringIO(value)
|
||||||
return (key, pickle.Unpickler(f).load())
|
return (key, Unpickler(f).load())
|
||||||
|
|
||||||
def previous(self):
|
def previous(self):
|
||||||
(key, value) = self.dict.previous()
|
(key, value) = self.dict.previous()
|
||||||
f = StringIO.StringIO(value)
|
f = StringIO(value)
|
||||||
return (key, pickle.Unpickler(f).load())
|
return (key, Unpickler(f).load())
|
||||||
|
|
||||||
def first(self):
|
def first(self):
|
||||||
(key, value) = self.dict.first()
|
(key, value) = self.dict.first()
|
||||||
f = StringIO.StringIO(value)
|
f = StringIO(value)
|
||||||
return (key, pickle.Unpickler(f).load())
|
return (key, Unpickler(f).load())
|
||||||
|
|
||||||
def last(self):
|
def last(self):
|
||||||
(key, value) = self.dict.last()
|
(key, value) = self.dict.last()
|
||||||
f = StringIO.StringIO(value)
|
f = StringIO(value)
|
||||||
return (key, pickle.Unpickler(f).load())
|
return (key, Unpickler(f).load())
|
||||||
|
|
||||||
|
|
||||||
class DbfilenameShelf(Shelf):
|
class DbfilenameShelf(Shelf):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue