Added post-commit callbacks to transactions.
authorFredrik Tolf <fredrik@dolda2000.com>
Fri, 20 Mar 2015 04:21:18 +0000 (05:21 +0100)
committerFredrik Tolf <fredrik@dolda2000.com>
Fri, 20 Mar 2015 04:21:18 +0000 (05:21 +0100)
didex/db.py

index 75aee02..316fa02 100644 (file)
@@ -64,10 +64,18 @@ class txn(object):
     def __init__(self, env, flags=bd.DB_TXN_WRITE_NOSYNC):
         self.tx = env.txn_begin(None, flags)
         self.done = False
     def __init__(self, env, flags=bd.DB_TXN_WRITE_NOSYNC):
         self.tx = env.txn_begin(None, flags)
         self.done = False
+        self.pcommit = set()
 
     def commit(self):
         self.done = True
         self.tx.commit(0)
 
     def commit(self):
         self.done = True
         self.tx.commit(0)
+        def run1(list):
+            if len(list) > 0:
+                try:
+                    list[0]()
+                finally:
+                    run1(list[1:])
+        run1(list(self.pcommit))
 
     def abort(self):
         self.done = True
 
     def abort(self):
         self.done = True
@@ -81,6 +89,9 @@ class txn(object):
             self.abort()
         return False
 
             self.abort()
         return False
 
+    def postcommit(self, fun):
+        self.pcommit.add(fun)
+
 def txnfun(envfun):
     def fxf(fun):
         def wrapper(self, *args, tx=None, **kwargs):
 def txnfun(envfun):
     def fxf(fun):
         def wrapper(self, *args, tx=None, **kwargs):