Commit cec1b3f6 authored by Gregory P. Smith's avatar Gregory P. Smith

Maintain backwards compatibility with python < 2.3 by dynamically

adding the iterator interface for python >= 2.3.
parent 0aab0020
......@@ -52,9 +52,38 @@ error = db.DBError # So bsddb.error will mean something...
#----------------------------------------------------------------------
import sys
# 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(UserDict.DictMixin):
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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment