From 6a5596cc5283a4d887d53be95bf7ef651028daf8 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sun, 21 Sep 2003 04:51:46 +0000 Subject: Backport Greg's patch (1.7 to 1.8) for backwards code compatability. --- 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