]> granicus.if.org Git - python/commitdiff
Maintain backwards compatibility with python < 2.3 by dynamically
authorGregory P. Smith <greg@mad-scientist.com>
Sat, 20 Sep 2003 23:51:34 +0000 (23:51 +0000)
committerGregory P. Smith <greg@mad-scientist.com>
Sat, 20 Sep 2003 23:51:34 +0000 (23:51 +0000)
adding the iterator interface for python >= 2.3.

Lib/bsddb/__init__.py

index 2910236b3d7441e272322350e9fad92c58fe35ae..6b4f96518802b68c8106fec4b3d96d123bacf79a 100644 (file)
@@ -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