From: Michael Tremer Date: Fri, 6 Oct 2017 15:58:16 +0000 (+0100) Subject: Add DataObject type X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2e1b81e0f514ca930f0a41154f93ab059c30b312;p=pbs.git Add DataObject type Signed-off-by: Michael Tremer --- diff --git a/src/buildservice/base.py b/src/buildservice/base.py index cd848df9..62da79cf 100644 --- a/src/buildservice/base.py +++ b/src/buildservice/base.py @@ -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