Better infrastructure to load plugins
[cascardo/ipsilon.git] / ipsilon / util / user.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 ipsilon.util.data import Store
21
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
30 class User(object):
31     def __init__(self, username):
32         if username is None:
33             self.name = None
34             self._userdata = dict()
35         else:
36             self._userdata = self._get_user_data(username)
37             self.name = username
38
39     def _get_user_data(self, username):
40         store = Store()
41         return store.get_user_preferences(username)
42
43     @property
44     def is_admin(self):
45         if 'is_admin' in self._userdata:
46             if self._userdata['is_admin'] == '1':
47                 return True
48         return False
49
50     @is_admin.setter
51     def is_admin(self, value):
52         if value is True:
53             self._userdata['is_admin'] = '1'
54         else:
55             self._userdata['is_admin'] = '0'
56
57     @property
58     def fullname(self):
59         if 'fullname' in self._userdata:
60             return self._userdata['fullname']
61         else:
62             return self.name
63
64     @fullname.setter
65     def fullname(self, value):
66         self._userdata['fullname'] = value
67
68     @property
69     def sites(self):
70         if 'sites' in self._userdata:
71             d = []
72             for site in self._userdata['sites']:
73                 d.append(Site(site))
74         else:
75             return []
76
77     @sites.setter
78     def sites(self):
79         #TODO: implement setting sites via the user object ?
80         raise AttributeError