In configure we do not need to set_config()
[cascardo/ipsilon.git] / ipsilon / util / plugin.py
index 730ce6c..919a28d 100755 (executable)
@@ -21,7 +21,8 @@ import os
 import imp
 import cherrypy
 import inspect
-from ipsilon.util.data import Store
+from ipsilon.util.data import AdminStore
+from ipsilon.util.log import Log
 
 
 class Plugins(object):
@@ -71,11 +72,15 @@ class Plugins(object):
 class PluginLoader(object):
 
     def __init__(self, baseobj, facility, plugin_type):
-        (whitelist, config) = Store().get_plugins_config(facility)
+        config = AdminStore().load_options(facility)
+        cherrypy.log('LOAD: %s\n' % repr(config))
+        whitelist = []
+        if 'global' in config:
+            sec = config['global']
+            if 'order' in sec:
+                whitelist = sec['order'].split(',')
         if cherrypy.config.get('debug', False):
             cherrypy.log('[%s] %s: %s' % (facility, whitelist, config))
-        if whitelist is None:
-            whitelist = []
         if config is None:
             config = dict()
 
@@ -102,15 +107,15 @@ class PluginInstaller(object):
         return p.get_plugins(self._pathname, 'Installer')
 
 
-class PluginObject(object):
+class PluginObject(Log):
 
     def __init__(self):
         self.name = None
         self._config = None
         self._options = None
-        self._data = Store()
+        self._data = AdminStore()
 
-    def get_config_desc(self):
+    def get_config_desc(self, name=None):
         """ The configuration description is a dictionary that provides
             A description of the supported configuration options, as well
             as the default configuration option values.
@@ -119,16 +124,37 @@ class PluginObject(object):
              - option type
              - default value
         """
-        return self._options
+        if name is None:
+            return self._options
+
+        opt = self._options.get(name, None)
+        if opt is None:
+            return ''
+        return opt[0]
+
+    def _value_to_list(self, name):
+        if name not in self._config:
+            return
+        value = self._config[name]
+        if type(value) is list:
+            return
+        vlist = [x.strip() for x in value.split(',')]
+        self._config[name] = vlist
 
     def set_config(self, config):
         self._config = config
+        if self._config is None:
+            return
+        if self._options:
+            for name, opt in self._options.iteritems():
+                if opt[1] == 'list':
+                    self._value_to_list(name)
 
     def get_config_value(self, name):
         value = None
         if self._config:
             value = self._config.get(name, None)
-        if not value:
+        if value is None:
             if self._options:
                 opt = self._options.get(name, None)
                 if opt:
@@ -143,12 +169,27 @@ class PluginObject(object):
         if not self._config:
             self._config = dict()
         self._config[option] = value
+        if self._options and option in self._options:
+            if self._options[option][1] == 'list':
+                self._value_to_list(option)
 
     def get_plugin_config(self, facility):
-        return self._data.get_plugin_config(facility, self.name)
+        return self._data.load_options(facility, self.name)
+
+    def refresh_plugin_config(self, facility):
+        config = self.get_plugin_config(facility)
+        self.set_config(config)
+
+    def save_plugin_config(self, facility, config=None):
+        if config is None:
+            config = self._config
+        config = config.copy()
+
+        for key, value in config.items():
+            if type(value) is list:
+                config[key] = ','.join(value)
 
-    def save_plugin_config(self, facility):
-        self._data.save_plugin_config(facility, self.name, self._config)
+        self._data.save_options(facility, self.name, config)
 
     def get_data(self, idval=None, name=None, value=None):
         return self._data.get_data(self.name, idval=idval, name=name,
@@ -164,7 +205,7 @@ class PluginObject(object):
         self._data.del_datum(self.name, idval)
 
     def wipe_config_values(self, facility):
-        self._data.wipe_plugin_config(facility, self.name)
+        self._data.delete_options(facility, self.name, None)
 
     def wipe_data(self):
         self._data.wipe_data(self.name)