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 | |
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>
-rw-r--r-- | examples/ipsilon.conf | 1 | ||||
-rwxr-xr-x | src/root.py | 61 | ||||
-rwxr-xr-x | src/util/data.py | 49 | ||||
-rw-r--r-- | templates/index.html | 27 |
4 files changed, 129 insertions, 9 deletions
diff --git a/examples/ipsilon.conf b/examples/ipsilon.conf index dc45a1b..17cf5e9 100644 --- a/examples/ipsilon.conf +++ b/examples/ipsilon.conf @@ -2,3 +2,4 @@ log.screen = True base.dir = "../" admin.config.db = "/var/lib/ipsilon/adminconfig.sqlite" +user.prefs.db = "/var/lib/ipsilon/userprefs.sqlite" 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) diff --git a/templates/index.html b/templates/index.html index 230edc7..b38d105 100644 --- a/templates/index.html +++ b/templates/index.html @@ -8,15 +8,28 @@ </head> <body> <div id="container"> - <div id="background"> - <div id="background-header"></div> - <div id="background-navigation"></div> - <div id="background-left"></div> - <div id="background-center"></div> - <div id="background-right"></div> + <div id="logo"> + <p>Ipsilon</p> + </div> + <div id="admin"> + {% if user.is_admin %} + <a href="admin">admin</a> + {% endif %} + </div> + <div id="welcome"> + {% if user.name %} + <p>Welcome {{ user.fullname }}</p> + {% endif %} </div> <div id="content"> - <p>{{ content }}</p> + {% if not user.name %} + <p>Please <a href="login">Log In</a> + {% elif user.sites %} + <p>Registered application shortcuts:</p> + {% for site in user.sites %} + <p><a href="{{ site.link }}">{{ site.name }}</a></p> + {% endfor %} + {% endif %} </div> </div> </body> |