mirror of https://github.com/python/cpython
Maintain backwards compatibility with python < 2.3 by dynamically
adding the iterator interface for python >= 2.3.
This commit is contained in:
parent
0aab002057
commit
cec1b3f6a7
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue