]> git.ipfire.org Git - people/shoehn/ipfire.org.git/blobdiff - webapp/backend/settings.py
Major update of the webapp.
[people/shoehn/ipfire.org.git] / webapp / backend / settings.py
index 076ea65c7db335a57fc8fdf55f75572e1ea52277..6355485f0d76bbc36ad3b46ce973a9035d9028d4 100644 (file)
@@ -1,58 +1,58 @@
 #!/usr/bin/python
 
-from databases import Databases
-from misc import Singleton
+from misc import Object
 
-class Settings(object):
-       __metaclass__ = Singleton
+class Settings(Object):
+       def init(self):
+               """
+                       Initialize the settings dictionary by fetching the
+                       entire table from the database.
+               """
+               self.__settings = {}
 
-       @property
-       def db(self):
-               return Databases().webapp
+               query = self.db.query("SELECT k, v FROM settings")
+
+               for row in query:
+                       self.__settings[row.k] = row.v
 
        def query(self, key):
                return self.db.get("SELECT * FROM settings WHERE k=%s", key)
 
-       def get(self, key):
-               return "%s" % self.query(key)["v"]
-
-       def get_id(self, key):
-               return self.query(key)["id"]
+       def get(self, key, default=None):
+               return self.__settings.get(key, default)
 
-       def get_int(self, key):
+       def get_int(self, key, default=None):
                value = self.get(key)
 
                if value is None:
-                       return None
+                       return default
 
-               return int(value)
+               try:
+                       return int(value)
+               except (TypeError, ValueError):
+                       return default
 
        def get_float(self, key):
                value = self.get(key)
 
                if value is None:
-                       return None
+                       return default
 
-               return float(value)
+               try:
+                       return float(value)
+               except (TypeError, ValueError):
+                       return default
 
        def set(self, key, value):
-               id = self.get(key)
+               oldvalue = self.get(key)
 
-               if not id:
-                       self.db.execute("INSERT INTO settings(k, v) VALUES(%s, %s)", key, value)
+               if value == oldvalue:
+                       return
+
+               if oldvalue:
+                       self.db.execute("UPDATE settings SET v = %s WHERE k = %s", value, key)
                else:
-                       self.db.execute("UPDATE settings SET v=%s WHERE id=%s" % (value, id))
+                       self.db.execute("INSERT INTO settings(k, v) VALUES(%s, %s)", key, value)
 
        def get_all(self):
-               attrs = {}
-
-               for s in self.db.query("SELECT * FROM settings"):
-                       attrs[s.k] = s.v
-
-               return attrs
-
-
-if __name__ == "__main__":
-       s = Settings()
-
-       print s.get_all()
+               return self.__settings.copy()