diff options
author | Simo Sorce <simo@redhat.com> | 2013-12-12 14:21:41 -0500 |
---|---|---|
committer | Simo Sorce <simo@redhat.com> | 2013-12-18 23:05:57 -0500 |
commit | 1e97d03807bd893152bf2cbd0f20102af9c8f80d (patch) | |
tree | bd2e6e483d800edc8d9c4db596a46b18e6da2d8b /src | |
parent | 29d8f5eca90bcca199d7ad84f9934f3f24eed906 (diff) | |
download | ipsilon-1e97d03807bd893152bf2cbd0f20102af9c8f80d.tar.gz ipsilon-1e97d03807bd893152bf2cbd0f20102af9c8f80d.tar.xz ipsilon-1e97d03807bd893152bf2cbd0f20102af9c8f80d.zip |
Initial user preferences infrastructure
Signed-off-by: Simo Sorce <simo@redhat.com>
Diffstat (limited to 'src')
-rwxr-xr-x | src/root.py | 61 | ||||
-rwxr-xr-x | src/util/data.py | 49 |
2 files changed, 108 insertions, 2 deletions
diff --git a/src/root.py b/src/root.py index d4cd900..0c6cd41 100755 --- a/src/root.py +++ b/src/root.py @@ -17,8 +17,67 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. +from util import data import cherrypy +class Site(object): + def __init__(self, value): + # implement lookup of sites id for link/name + self.link = value + self.name = value + +class User(object): + def __init__(self, username): + if username is None: + self.name = None + self._userdata = dict() + else: + self._userdata = self._get_user_data(username) + self.name = username + + def _get_user_data(self, username): + store = data.Store() + return store._get_user_preferences(username) + + @property + def is_admin(self): + if 'is_admin' in self._userdata: + if self._userdata['is_admin'] == '1': + return True + return False + + @is_admin.setter + def is_admin(self, value): + if value is True: + self._userdata['is_admin'] = '1' + else: + self._userdata['is_admin'] = '0' + + @property + def fullname(self): + if 'fullname' in self._userdata: + return self._userdata['fullname'] + else: + return self.name + + @fullname.setter + def fullname(self, value): + self._userdata['fullname'] = value + + @property + def sites(self): + if 'sites' in self._userdata: + d = [] + for site in self._userdata['sites']: + d.append(Site(site)) + else: + return [] + + @sites.setter + def sites(self): + #TODO: implement setting sites via the user object ? + raise AttributeError + class Root(object): def __init__(self, template_env): @@ -27,7 +86,7 @@ class Root(object): @cherrypy.expose def index_html(self): tmpl = self._env.get_template('index.html') - return tmpl.render(title='Root', content='Awesome!') + return tmpl.render(title='Root', user=User(None)) @cherrypy.expose def index(self): diff --git a/src/util/data.py b/src/util/data.py index 871f991..ec64588 100755 --- a/src/util/data.py +++ b/src/util/data.py @@ -51,7 +51,15 @@ class Store(object): conf = {} for row in rows: - conf[row[0]] = row[1] + if row[0] in conf: + # multivalued + if conf[row[0]] is list: + conf[row[0]].append(row[1]) + else: + v = conf[row[0]] + conf[row[0]] = [v, row[1]] + else: + conf[row[0]] = row[1] return conf @@ -63,3 +71,42 @@ class Store(object): path = os.path.join(self._path, 'adminconfig.sqlite') return self._load_config(path) + + def _load_user_prefs(self, dbname, user): + con = None + rows = [] + try: + con = sqlite3.connect(dbname) + cur = con.cursor() + cur.executescript(""" + CREATE TABLE IF NOT EXISTS users(name TEXT, + option TEXT, + value TEXT) + """) + cur.execute("SELECT option, value FROM users " + "where name = '%s'" % user) + rows = cur.fetchall() + con.commit() + except sqlite3.Error, e: + if con: + con.rollback() + cherrypy.log.error("Failed to load %s's prefs from " + "%s: [%s]" % ( user, dbname, e)) + finally: + if con: + con.close() + + conf = {} + for row in rows: + conf[row[0]] = row[1] + + 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(path, user) |