Use python logging in install / log cherrypy at right severity
[cascardo/ipsilon.git] / ipsilon / util / plugin.py
old mode 100755 (executable)
new mode 100644 (file)
index 063767c..2f9c003
@@ -1,5 +1,3 @@
-#!/usr/bin/python
-#
 # Copyright (C) 2013  Simo Sorce <simo@redhat.com>
 #
 # see file 'COPYING' for use and warranty information
@@ -21,7 +19,7 @@ import os
 import imp
 import cherrypy
 import inspect
-from ipsilon.util.config import Config
+import logging
 from ipsilon.util.data import AdminStore
 from ipsilon.util.log import Log
 
@@ -33,7 +31,7 @@ class Plugins(object):
 
     def _load_class(self, tree, class_type, file_name, *pargs):
         cherrypy.log.error('Check module %s for class %s' % (file_name,
-                                                             class_type))
+                           class_type), severity=logging.DEBUG)
         name, ext = os.path.splitext(os.path.split(file_name)[-1])
         try:
             if ext.lower() == '.py':
@@ -43,21 +41,24 @@ class Plugins(object):
             else:
                 return
         except Exception, e:  # pylint: disable=broad-except
-            cherrypy.log.error('Failed to load "%s" module: [%s]' % (name, e))
+            cherrypy.log.error('Failed to load "%s" module: [%s]' % (name, e),
+                               severity=logging.ERROR)
             return
 
         if hasattr(mod, class_type):
             instance = getattr(mod, class_type)(*pargs)
             public_name = getattr(instance, 'name', name)
             tree[public_name] = instance
-            cherrypy.log.error('Added module %s as %s' % (name, public_name))
+            cherrypy.log.error('Added module %s as %s' % (name, public_name),
+                               severity=logging.DEBUG)
 
     def _load_classes(self, tree, path, class_type, *pargs):
         files = None
         try:
             files = os.listdir(path)
         except Exception, e:  # pylint: disable=broad-except
-            cherrypy.log.error('No modules in %s: [%s]' % (path, e))
+            cherrypy.log.error('No modules in %s: [%s]' % (path, e),
+                               severity=logging.ERROR)
             return
 
         for name in files:
@@ -89,6 +90,10 @@ class PluginLoader(Log):
             self.__data = AdminStore()
         return self.__data
 
+    @property
+    def is_readonly(self):
+        return self._data.is_readonly
+
     def get_plugins(self):
         p = Plugins()
         return p.get_plugins(self._pathname, self._plugin_type, self)
@@ -129,6 +134,10 @@ class PluginObject(Log):
         self._plugins = plugins
         self.is_enabled = False
 
+    @property
+    def is_readonly(self):
+        return self._data.is_readonly
+
     def on_enable(self):
         return
 
@@ -177,7 +186,11 @@ class PluginObject(Log):
     def refresh_plugin_config(self):
         config = self.get_plugin_config()
         if config:
-            self.import_config(config)
+            try:
+                self.import_config(config)
+            except Exception, e:  # pylint: disable=broad-except
+                self.error('Failed to refresh config for %s (%s)' %
+                           (self.name, e))
 
     def save_plugin_config(self, config=None):
         if config is None:
@@ -203,41 +216,3 @@ class PluginObject(Log):
 
     def wipe_data(self):
         self._data.wipe_data(self.name)
-
-
-class PluginConfig(Log):
-
-    def __init__(self):
-        self._config = None
-
-    def new_config(self, name, *config_args):
-        self._config = Config(name, *config_args)
-
-    def get_config_obj(self):
-        if self._config is None:
-            raise AttributeError('Config not initialized')
-        return self._config
-
-    def import_config(self, config):
-        if not self._config:
-            raise AttributeError('Config not initialized, cannot import')
-
-        for key, value in config.iteritems():
-            if key in self._config:
-                self._config[key].import_value(str(value))
-
-    def export_config(self):
-        config = dict()
-        for name, option in self._config.iteritems():
-            config[name] = option.export_value()
-        return config
-
-    def get_config_value(self, name):
-        if not self._config:
-            raise AttributeError('Config not initialized')
-        return self._config[name].get_value()
-
-    def set_config_value(self, name, value):
-        if not self._config:
-            raise AttributeError('Config not initialized')
-        return self._config[name].set_value(value)