diff roundup/backends/rdbms_common.py @ 1519:6fede2aa6a12

added ability to restore retired nodes
author Andrey Lebedev <kedder@users.sourceforge.net>
date Sun, 16 Mar 2003 22:24:56 +0000
parents a516bbb9896b
children 63aa7be52d2c
line wrap: on
line diff
--- a/roundup/backends/rdbms_common.py	Sat Mar 15 23:46:08 2003 +0000
+++ b/roundup/backends/rdbms_common.py	Sun Mar 16 22:24:56 2003 +0000
@@ -1,4 +1,4 @@
-# $Id: rdbms_common.py,v 1.43 2003-03-14 02:51:25 richard Exp $
+# $Id: rdbms_common.py,v 1.44 2003-03-16 22:24:55 kedder Exp $
 ''' Relational database (SQL) backend common code.
 
 Basics:
@@ -894,8 +894,8 @@
         # do the db-related init stuff
         db.addclass(self)
 
-        self.auditors = {'create': [], 'set': [], 'retire': []}
-        self.reactors = {'create': [], 'set': [], 'retire': []}
+        self.auditors = {'create': [], 'set': [], 'retire': [], 'restore': []}
+        self.reactors = {'create': [], 'set': [], 'retire': [], 'restore': []}
 
     def schema(self):
         ''' A dumpable version of the schema that we can store in the
@@ -1473,9 +1473,33 @@
         if __debug__:
             print >>hyperdb.DEBUG, 'retire', (self, sql, nodeid)
         self.db.cursor.execute(sql, (1, nodeid))
+        if self.do_journal:
+            self.db.addjournal(self.classname, nodeid, 'retired', None)
 
         self.fireReactors('retire', nodeid, None)
 
+    def restore(self, nodeid):
+        '''Restpre a retired node.
+
+        Make node available for all operations like it was before retirement.
+        '''
+        if self.db.journaltag is None:
+            raise DatabaseError, 'Database open read-only'
+
+        self.fireAuditors('restore', nodeid, None)
+
+        # use the arg for __retired__ to cope with any odd database type
+        # conversion (hello, sqlite)
+        sql = 'update _%s set __retired__=%s where id=%s'%(self.classname,
+            self.db.arg, self.db.arg)
+        if __debug__:
+            print >>hyperdb.DEBUG, 'restore', (self, sql, nodeid)
+        self.db.cursor.execute(sql, (0, nodeid))
+        if self.do_journal:
+            self.db.addjournal(self.classname, nodeid, 'restored', None)
+
+        self.fireReactors('restore', nodeid, None)
+        
     def is_retired(self, nodeid):
         '''Return true if the node is rerired
         '''

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