X-Git-Url: http://git.cascardo.info/?p=cascardo%2Fipsilon.git;a=blobdiff_plain;f=ipsilon%2Futil%2Fdata.py;h=251c998a702e0221c2668919adeae954a17ee93d;hp=15bf5b774662f068999699efa4e166cfe974c1d8;hb=2b9722213d76306fe6f3b9f2fe157b3459d28e3a;hpb=e34f21377d30704c342abb24a3a84c27fd8cc957 diff --git a/ipsilon/util/data.py b/ipsilon/util/data.py index 15bf5b7..251c998 100755 --- a/ipsilon/util/data.py +++ b/ipsilon/util/data.py @@ -29,6 +29,24 @@ class Store(object): self._path = os.getcwd() else: self._path = path + self._admin_dbname = self._get_admin_dbname() + self._user_dbname = self._get_userprefs_dbname() + + def _get_admin_dbname(self): + path = None + if 'admin.config.db' in cherrypy.config: + path = cherrypy.config['admin.config.db'] + if not path: + path = os.path.join(self._path, 'adminconfig.sqlite') + return path + + def _get_userprefs_dbname(self): + path = None + if 'user.prefs.db' in cherrypy.config: + path = cherrypy.config['user.prefs.db'] + if not path: + path = os.path.join(self._path, 'userprefs.sqlite') + return path def _load_config(self, dbname): con = None @@ -65,13 +83,7 @@ class Store(object): return conf def get_admin_config(self): - path = None - if 'admin.config.db' in cherrypy.config: - path = cherrypy.config['admin.config.db'] - if not path: - path = os.path.join(self._path, 'adminconfig.sqlite') - - return self._load_config(path) + return self._load_config(self._admin_dbname) def _load_user_prefs(self, dbname, user): con = None @@ -104,10 +116,75 @@ class Store(object): return conf def get_user_preferences(self, user): - path = None - if 'user.prefs.db' in cherrypy.config: - path = cherrypy.config['user.prefs.db'] - if not path: - path = os.path.join(self._path, 'userprefs.sqlite') + return self._load_user_prefs(self._user_dbname, user) - return self._load_user_prefs(path, user) + def get_plugins_config(self, facility): + con = None + rows = [] + try: + con = sqlite3.connect(self._admin_dbname) + cur = con.cursor() + cur.execute("CREATE TABLE IF NOT EXISTS " + + facility + " (name TEXT,option TEXT,value TEXT)") + cur.execute("SELECT * FROM " + facility) + rows = cur.fetchall() + con.commit() + except sqlite3.Error, e: + if con: + con.rollback() + cherrypy.log.error("Failed to load %s config: [%s]" % (facility, + e)) + finally: + if con: + con.close() + + lpo = [] + plco = dict() + for row in rows: + if row[0] == 'global': + if row[1] == 'order': + lpo = row[2].split(',') + continue + if row[0] not in plco: + # one dict per provider + plco[row[0]] = dict() + + conf = plco[row[0]] + if row[1] in conf: + if conf[row[1]] is list: + conf[row[1]].append(row[2]) + else: + v = conf[row[1]] + conf[row[1]] = [v, row[2]] + else: + conf[row[1]] = row[2] + + return (lpo, plco) + + def save_plugin_config(self, facility, plugin, options): + SELECT = "SELECT option, value FROM %s WHERE name=?" % facility + UPDATE = "UPDATE %s SET value=? WHERE name=? AND option=?" % facility + INSERT = "INSERT INTO %s VALUES(?,?,?)" % facility + con = None + try: + con = sqlite3.connect(self._admin_dbname) + cur = con.cursor() + curvals = dict() + for row in cur.execute(SELECT, (plugin,)): + curvals[row[0]] = row[1] + + for name in options: + if name in curvals: + cur.execute(UPDATE, (options[name], plugin, name)) + else: + cur.execute(INSERT, (plugin, name, options[name])) + + con.commit() + except sqlite3.Error, e: + if con: + con.rollback() + cherrypy.log.error("Failed to store config: [%s]" % e) + raise + finally: + if con: + con.close()