]> git.ipfire.org Git - people/jschlag/pbs.git/commitdiff
Add DataObject type
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 6 Oct 2017 15:58:16 +0000 (16:58 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 6 Oct 2017 15:58:16 +0000 (16:58 +0100)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/buildservice/base.py

index cd848df9dc2a6ebb9c7b53acef70442026436e24..62da79cf4b8464447bc67d2915531659cfd5bf5f 100644 (file)
@@ -1,5 +1,7 @@
 #!/usr/bin/python
 
+from .decorators import *
+
 class Object(object):
        """
                Main object where all other objects inherit from.
@@ -42,3 +44,33 @@ class Object(object):
        @property
        def geoip(self):
                return self.pakfire.geoip
+
+
+class DataObject(Object):
+       # Table name
+       table = None
+
+       def init(self, id, data=None):
+               self.id = id
+
+               if data:
+                       self.data = data
+
+       @lazy_property
+       def data(self):
+               assert self.table, "Table name is not set"
+               assert self.id
+
+               return self.db.get("SELECT * FROM %s \
+                       WHERE id = %%s" % self.table, self.id)
+
+       def _set_attribute(self, key, val):
+               # Detect if an update is needed
+               if self.data[key] == val:
+                       return
+
+               self.db.execute("UPDATE %s SET %s = %%s \
+                       WHERE id = %%s" % (self.table, key), val, self.id)
+
+               # Update the cached attribute
+               self.data[key] = val