#!/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()