changeset 4383:0d9369d35483

fix up some pre-Python2.6 compatibility issues in the *dbm interface
author Richard Jones <richard@users.sourceforge.net>
date Sat, 10 Jul 2010 03:45:17 +0000
parents bddc72753d91
children b0d812e10549
files roundup/anypy/dbm_.py roundup/backends/back_anydbm.py roundup/backends/sessions_dbm.py
diffstat 3 files changed, 23 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/roundup/anypy/dbm_.py	Thu Jul 01 02:20:51 2010 +0000
+++ b/roundup/anypy/dbm_.py	Sat Jul 10 03:45:17 2010 +0000
@@ -2,6 +2,14 @@
 # package containing the various implementations. The "wichdb" module's
 # whichdb() function was moved to the new "dbm" module.
 
+import sys
+if sys.version_info[:2] < (2, 6):
+    def key_in(db, key):
+        return db.has_key(key)
+else:
+    def key_in(db, key):
+        return key in db
+
 try:
     # old school first because <3 had a "dbm" module too...
     import anydbm
--- a/roundup/backends/back_anydbm.py	Thu Jul 01 02:20:51 2010 +0000
+++ b/roundup/backends/back_anydbm.py	Sat Jul 10 03:45:17 2010 +0000
@@ -24,7 +24,7 @@
 
 import os, marshal, re, weakref, string, copy, time, shutil, logging
 
-from roundup.anypy.dbm_ import anydbm, whichdb
+from roundup.anypy.dbm_ import anydbm, whichdb, key_in
 
 from roundup import hyperdb, date, password, roundupdb, security, support
 from roundup.support import reversed
@@ -248,7 +248,7 @@
         """
         # open the ids DB - create if if doesn't exist
         db = self.opendb('_ids', 'c')
-        if classname in db:
+        if key_in(db, classname):
             newid = db[classname] = str(int(db[classname]) + 1)
         else:
             # the count() bit is transitional - older dbs won't start at 1
@@ -322,7 +322,7 @@
         # get from the database and save in the cache
         if db is None:
             db = self.getclassdb(classname)
-        if nodeid not in db:
+        if not key_in(db, nodeid):
             raise IndexError("no such %s %s"%(classname, nodeid))
 
         # check the uncommitted, destroyed nodes
@@ -435,7 +435,7 @@
         # not in the cache - check the database
         if db is None:
             db = self.getclassdb(classname)
-        return nodeid in db
+        return key_in(db, nodeid)
 
     def countnodes(self, classname, db=None):
         count = 0
@@ -552,7 +552,7 @@
             db_type = self.determine_db_type(path)
             db = self.opendb(db_name, 'w')
 
-            for key in db:
+            for key in db.keys():
                 # get the journal for this db entry
                 journal = marshal.loads(db[key])
                 l = []
@@ -679,7 +679,7 @@
         db = self.getCachedJournalDB(classname)
 
         # now insert the journal entry
-        if nodeid in db:
+        if key_in(db, nodeid):
             # append to existing
             s = db[nodeid]
             l = marshal.loads(s)
@@ -704,12 +704,12 @@
     def doDestroyNode(self, classname, nodeid):
         # delete from the class database
         db = self.getCachedClassDB(classname)
-        if nodeid in db:
+        if key_in(db, nodeid):
             del db[nodeid]
 
         # delete from the database
         db = self.getCachedJournalDB(classname)
-        if nodeid in db:
+        if key_in(db, nodeid):
             del db[nodeid]
 
     def rollback(self):
@@ -1530,12 +1530,12 @@
             db = self.db.getclassdb(self.classname)
             must_close = True
         try:
-            res.extend(db)
+            res.extend(db.keys())
 
             # remove the uncommitted, destroyed nodes
             if self.classname in self.db.destroyednodes:
                 for nodeid in self.db.destroyednodes[self.classname]:
-                    if nodeid in db:
+                    if key_in(db, nodeid):
                         res.remove(nodeid)
 
             # check retired flag
--- a/roundup/backends/sessions_dbm.py	Thu Jul 01 02:20:51 2010 +0000
+++ b/roundup/backends/sessions_dbm.py	Sat Jul 10 03:45:17 2010 +0000
@@ -11,7 +11,7 @@
 
 from roundup import hyperdb
 from roundup.i18n import _
-from roundup.anypy.dbm_ import anydbm, whichdb
+from roundup.anypy.dbm_ import anydbm, whichdb, key_in
 
 class BasicDatabase:
     ''' Provide a nice encapsulation of an anydbm store.
@@ -28,7 +28,7 @@
     def exists(self, infoid):
         db = self.opendb('c')
         try:
-            return infoid in db
+            return key_in(db, infoid)
         finally:
             db.close()
 
@@ -60,7 +60,7 @@
     def get(self, infoid, value, default=_marker):
         db = self.opendb('c')
         try:
-            if infoid in db:
+            if key_in(db, infoid):
                 values = marshal.loads(db[infoid])
             else:
                 if default != self._marker:
@@ -85,7 +85,7 @@
     def set(self, infoid, **newvalues):
         db = self.opendb('c')
         try:
-            if infoid in db:
+            if key_in(db, infoid):
                 values = marshal.loads(db[infoid])
             else:
                 values = {'__timestamp': time.time()}
@@ -104,7 +104,7 @@
     def destroy(self, infoid):
         db = self.opendb('c')
         try:
-            if infoid in db:
+            if key_in(db, infoid):
                 del db[infoid]
         finally:
             db.close()

Roundup Issue Tracker: http://roundup-tracker.org/