From: Simo Sorce Date: Thu, 19 Dec 2013 03:44:25 +0000 (-0500) Subject: Move template and user retrieval to page class X-Git-Tag: v0.2.2~133 X-Git-Url: http://git.cascardo.info/?p=cascardo%2Fipsilon.git;a=commitdiff_plain;h=ee0d1ce71d1f4883aecc426595ac86322a91260e Move template and user retrieval to page class Signed-off-by: Simo Sorce --- diff --git a/examples/ipsilon.conf b/examples/ipsilon.conf index cca7786..fa75839 100644 --- a/examples/ipsilon.conf +++ b/examples/ipsilon.conf @@ -1,5 +1,6 @@ [global] log.screen = True +base.mount = "/idp" 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 50247f7..a352641 100755 --- a/src/root.py +++ b/src/root.py @@ -17,70 +17,10 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -from util import data from util import page 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(page.Page): def root(self): - tmpl = self._env.get_template('index.html') - return tmpl.render(title='Root', user=User(self.username)) + return self._template('index.html', title='Root') diff --git a/src/util/page.py b/src/util/page.py index 4236e9f..15cbed0 100755 --- a/src/util/page.py +++ b/src/util/page.py @@ -17,6 +17,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . +from util import user import cherrypy def protect(): @@ -31,10 +32,12 @@ def protect(): class Page(object): def __init__(self, template_env): self._env = template_env + self.basepath = cherrypy.config.get('base.mount', "") self.username = None def __call__(self, *args, **kwargs): self.username = cherrypy.session.get('user', None) + self.user = user.User(self.username) if len(args) > 0: op = getattr(self, args[0], None) @@ -47,6 +50,10 @@ class Page(object): return self.default(*args, **kwargs) + def _template(self, *args, **kwargs): + t = self._env.get_template(args[0]) + return t.render(basepath=self.basepath, user=self.user, **kwargs) + def default(self, *args, **kwargs): raise cherrypy.HTTPError(404) diff --git a/src/util/user.py b/src/util/user.py new file mode 100755 index 0000000..1241340 --- /dev/null +++ b/src/util/user.py @@ -0,0 +1,79 @@ +#!/usr/bin/python +# +# Copyright (C) 2013 Simo Sorce +# +# see file 'COPYING' for use and warranty information +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +from util import data + +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 + diff --git a/templates/index.html b/templates/index.html index b38d105..157c938 100644 --- a/templates/index.html +++ b/templates/index.html @@ -3,8 +3,8 @@ {{ title }} - - + +