Initial user preferences infrastructure
[cascardo/ipsilon.git] / src / root.py
1 #!/usr/bin/python
2 #
3 # Copyright (C) 2013  Simo Sorce <simo@redhat.com>
4 #
5 # see file 'COPYING' for use and warranty information
6 #
7 # This program is free software; you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation, either version 3 of the License, or
10 # (at your option) any later version.
11 #
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 # GNU General Public License for more details.
16 #
17 # You should have received a copy of the GNU General Public License
18 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
20 from util import data
21 import cherrypy
22
23 class Site(object):
24     def __init__(self, value):
25         # implement lookup of sites id for link/name
26         self.link = value
27         self.name = value
28
29 class User(object):
30     def __init__(self, username):
31         if username is None:
32             self.name = None
33             self._userdata = dict()
34         else:
35             self._userdata = self._get_user_data(username)
36             self.name = username
37
38     def _get_user_data(self, username):
39         store = data.Store()
40         return store._get_user_preferences(username)
41
42     @property
43     def is_admin(self):
44         if 'is_admin' in self._userdata:
45             if self._userdata['is_admin'] == '1':
46                 return True
47         return False
48
49     @is_admin.setter
50     def is_admin(self, value):
51         if value is True:
52             self._userdata['is_admin'] = '1'
53         else:
54             self._userdata['is_admin'] = '0'
55
56     @property
57     def fullname(self):
58         if 'fullname' in self._userdata:
59             return self._userdata['fullname']
60         else:
61             return self.name
62
63     @fullname.setter
64     def fullname(self, value):
65         self._userdata['fullname'] = value
66
67     @property
68     def sites(self):
69         if 'sites' in self._userdata:
70             d = []
71             for site in self._userdata['sites']:
72                 d.append(Site(site))
73         else:
74             return []
75
76     @sites.setter
77     def sites(self):
78         #TODO: implement setting sites via the user object ?
79         raise AttributeError
80
81 class Root(object):
82
83     def __init__(self, template_env):
84         self._env = template_env
85
86     @cherrypy.expose
87     def index_html(self):
88         tmpl = self._env.get_template('index.html')
89         return tmpl.render(title='Root', user=User(None))
90
91     @cherrypy.expose
92     def index(self):
93         return self.index_html()