index 77f16096dad48aa323ef4b496cc7052f7ffc20c2..233de403cb6d1117e89834ea82e8daa3db14b3aa 100644 (file)
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
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])
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'.