Maintain backwards compatibility with python < 2.3 by dynamically

adding the iterator interface for python >= 2.3.
This commit is contained in:
Gregory P. Smith 2003-09-20 23:51:34 +00:00
parent 0aab002057
commit cec1b3f6a7
1 changed files with 31 additions and 19 deletions

View File

@ -52,9 +52,38 @@ error = db.DBError # So bsddb.error will mean something...
#----------------------------------------------------------------------
import UserDict
import sys
class _DBWithCursor(UserDict.DictMixin):
# for backwards compatibility with python versions older than 2.3, the
# iterator interface is dynamically defined and added using a mixin
# class. old python can't tokenize it due to the yield keyword.
if sys.version >= '2.3':
exec """
import UserDict
class _iter_mixin(UserDict.DictMixin):
def __iter__(self):
try:
yield self.first()[0]
next = self.next
while 1:
yield next()[0]
except _bsddb.DBNotFoundError:
return
def iteritems(self):
try:
yield self.first()
next = self.next
while 1:
yield next()
except _bsddb.DBNotFoundError:
return
"""
else:
class _iter_mixin: pass
class _DBWithCursor(_iter_mixin):
"""
A simple wrapper around DB that makes it look like the bsddbobject in
the old module. It uses a cursor as needed to provide DB traversal.
@ -145,23 +174,6 @@ class _DBWithCursor(UserDict.DictMixin):
self._checkOpen()
return self.db.sync()
def __iter__(self):
try:
yield self.first()[0]
next = self.next
while 1:
yield next()[0]
except _bsddb.DBNotFoundError:
return
def iteritems(self):
try:
yield self.first()
next = self.next
while 1:
yield next()
except _bsddb.DBNotFoundError:
return
#----------------------------------------------------------------------
# Compatibility object factory functions