From cec1b3f6a7e899179c6463145ceff47a6c5bc805 Mon Sep 17 00:00:00 2001 From: "Gregory P. Smith" Date: Sat, 20 Sep 2003 23:51:34 +0000 Subject: Maintain backwards compatibility with python < 2.3 by dynamically adding the iterator interface for python >= 2.3. --- Lib/bsddb/__init__.py | 48 ++++++++++++++++++++++++++++++------------------ 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/Lib/bsddb/__init__.py b/Lib/bsddb/__init__.py index 2910236..6b4f965 100644 --- a/Lib/bsddb/__init__.py +++ b/Lib/bsddb/__init__.py @@ -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 -- cgit v0.12