diff roundup/backends/back_anydbm.py @ 4534:0dd6bdeb2eb5

issue2550729: Fix password history display for anydbm backend... ...thanks to Ralf Hemmecke for reporting.
author Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
date Wed, 28 Sep 2011 11:06:24 +0000
parents e572c5e28d0b
children fd972e18b21a
line wrap: on
line diff
--- a/roundup/backends/back_anydbm.py	Mon Sep 26 07:51:42 2011 +0000
+++ b/roundup/backends/back_anydbm.py	Wed Sep 28 11:06:24 2011 +0000
@@ -575,6 +575,21 @@
         self.transactions.append((self.doSetJournal, (classname, nodeid,
             journal)))
 
+    def fix_journal(self, classname, journal):
+        """ fix password entries to correct type """
+        pwprops = {}
+        for pn, prop in self.getclass(classname).properties.iteritems():
+            if isinstance(prop, hyperdb.Password):
+                pwprops [pn] = 1
+        if not pwprops:
+            return journal
+        for j in journal:
+            if j[3] == 'set':
+                for k, v in j[4].items():
+                    if k in pwprops:
+                        j[4][k] = password.JournalPassword(j[4][k])
+        return journal
+
     def getjournal(self, classname, nodeid):
         """ get the journal for id
 
@@ -611,7 +626,7 @@
                 raise
             if res:
                 # we have unsaved journal entries, return them
-                return res
+                return self.fix_journal (classname, res)
             raise IndexError('no such %s %s'%(classname, nodeid))
         try:
             journal = marshal.loads(db[nodeid])
@@ -619,14 +634,14 @@
             db.close()
             if res:
                 # we have some unsaved journal entries, be happy!
-                return res
+                return self.fix_journal (classname, res)
             raise IndexError('no such %s %s'%(classname, nodeid))
         db.close()
 
         # add all the saved journal entries for this node
         for nodeid, date_stamp, user, action, params in journal:
             res.append((nodeid, date.Date(date_stamp), user, action, params))
-        return res
+        return self.fix_journal (classname, res)
 
     def pack(self, pack_before):
         """ Delete all journal entries except "create" before 'pack_before'.

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