# See the file named COPYING for the project license
from ipsilon.util.log import Log
-from ipsilon.util.plugin import PluginLoader, PluginObject
-from ipsilon.util.plugin import PluginInstaller
+from ipsilon.util.plugin import PluginInstaller, PluginLoader
+from ipsilon.util.plugin import PluginObject, PluginConfig
-class InfoProviderBase(PluginObject, Log):
+class InfoProviderBase(PluginConfig, PluginObject):
def __init__(self):
- super(InfoProviderBase, self).__init__()
- self.enabled = False
+ PluginConfig.__init__(self)
+ PluginObject.__init__(self)
+ self._site = None
+ self.is_enabled = False
def get_user_attrs(self, user):
raise NotImplementedError
- @property
- def is_enabled(self):
- return self.enabled
-
def enable(self, site):
- self.enabled = True
-
- plugins = site[FACILITY]
- if self in plugins['enabled']:
+ if self.is_enabled:
return
+ if not self._site:
+ self._site = site
+ plugins = self._site[FACILITY]
+
# configure self
if self.name in plugins['config']:
- self.set_config(plugins['config'][self.name])
+ self.import_config(plugins['config'][self.name])
plugins['enabled'].append(self)
+ self.is_enabled = True
self.debug('Info plugin enabled: %s' % self.name)
def disable(self, site):
- self.enabled = False
-
- plugins = site[FACILITY]
- if self not in plugins['enabled']:
+ if not self.is_enabled:
return
+ plugins = self._site[FACILITY]
plugins['enabled'].remove(self)
+ self.is_enabled = False
self.debug('Info plugin disabled: %s' % self.name)
+class InfoMapping(Log):
+
+ def __init__(self):
+ self.standard_attributes = {
+ 'fullname': 'Full Name',
+ 'nickname': 'Nickname',
+ 'surname': 'Last Name',
+ 'firstname': 'First Name',
+ 'title': 'Title',
+ 'dob': 'Date of Birth',
+ 'email': 'E-mail Address',
+ 'gender': 'Gender',
+ 'postcode': 'Postal Code',
+ 'street': 'Street Address',
+ 'state': 'State or Province',
+ 'country': 'Country',
+ 'phone': 'Telephone Number',
+ 'language': 'Language',
+ 'timezone': 'Time Zone',
+ }
+ self.mapping = dict()
+
+ def set_mapping(self, attrs_map):
+ self.mapping = attrs_map
+
+ def display_name(self, name):
+ if name in self.standard_attributes:
+ return self.standard_attributes[name]
+ return name
+
+ def map_attrs(self, attrs):
+ s = dict()
+ e = dict()
+ for a in attrs:
+ if a in self.mapping:
+ s[self.mapping[a]] = attrs[a]
+ else:
+ e[a] = attrs[a]
+
+ return s, e
+
+
FACILITY = 'info_config'