]> git.ipfire.org Git - ipfire.org.git/commitdiff
database: Support transactions
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 1 Nov 2017 12:12:51 +0000 (13:12 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 1 Nov 2017 12:12:51 +0000 (13:12 +0100)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
webapp/backend/database.py

index 1d18a4e3b95b8b21659193e18c0b83ba337cc857..37f4da05f2e7117d368af83390c5c1f3edb3002b 100644 (file)
@@ -181,6 +181,9 @@ class Connection(object):
                        self.close()
                        raise
 
+        def transaction(self):
+                return Transaction(self)
+
 
 class Row(dict):
        """A dict that allows for object-like property access syntax."""
@@ -191,6 +194,22 @@ class Row(dict):
                        raise AttributeError(name)
 
 
+class Transaction(object):
+        def __init__(self, db):
+                self.db = db
+
+                self.db.execute("START TRANSACTION")
+
+        def __enter__(self):
+                return self
+
+        def __exit__(self, exctype, excvalue, traceback):
+                if exctype is not None:
+                        self.db.execute("ROLLBACK")
+                else:
+                        self.db.execute("COMMIT")
+
+
 # Alias some common exceptions
 IntegrityError = psycopg2.IntegrityError
 OperationalError = psycopg2.OperationalError