summaryrefslogtreecommitdiffstats
path: root/ipsilon/admin/common.py
diff options
context:
space:
mode:
authorSimo Sorce <simo@redhat.com>2014-10-23 11:45:32 -0400
committerPatrick Uiterwijk <puiterwijk@redhat.com>2014-11-12 23:47:15 +0100
commit83da2bf3963db3e4427bced3b4c0681e751e54da (patch)
tree53f03ce8e60d2c68453cdb5fe6be9aad7ce2c362 /ipsilon/admin/common.py
parent0c14f7600de70baf5b3ee609288207dcdb65e1ae (diff)
downloadipsilon-83da2bf3963db3e4427bced3b4c0681e751e54da.tar.gz
ipsilon-83da2bf3963db3e4427bced3b4c0681e751e54da.tar.xz
ipsilon-83da2bf3963db3e4427bced3b4c0681e751e54da.zip
Refactor plugin configuration
Fork a PluginConfig class out of PluginObject, the base object now supports a simple dictionary config, while using PluginConfig provide access to structured util.config based configuration. Change UI code that deal with plugins configuration to properly use the new structured config objects in order to represent data in appropriate format based on the data type. Use the new util.config objects to represent plugins configuration. Signed-off-by: Simo Sorce <simo@redhat.com> Reviewed-by: Patrick Uiterwijk <puiterwijk@redhat.com>
Diffstat (limited to 'ipsilon/admin/common.py')
-rwxr-xr-xipsilon/admin/common.py74
1 files changed, 35 insertions, 39 deletions
diff --git a/ipsilon/admin/common.py b/ipsilon/admin/common.py
index b9dfbf4..3d5313a 100755
--- a/ipsilon/admin/common.py
+++ b/ipsilon/admin/common.py
@@ -21,6 +21,7 @@ import cherrypy
from ipsilon.util.page import Page
from ipsilon.util.page import admin_protect
from ipsilon.util.plugin import PluginObject
+from ipsilon.util import config as pconfig
class AdminPage(Page):
@@ -46,33 +47,13 @@ class AdminPluginConfig(AdminPage):
self.menu = [parent]
self.back = parent.url
- # Get the defaults
- options = po.get_config_desc()
- if options is None:
- options = dict()
-
- self.options_order = []
- if hasattr(po, 'conf_opt_order'):
- self.options_order = po.conf_opt_order
-
- # append any undefined options
- add = []
- for k in options.keys():
- if k not in self.options_order:
- add.append(k)
- if len(add):
- add.sort()
- for k in add:
- self.options_order.append(k)
-
def root_with_msg(self, message=None, message_type=None):
return self._template('admin/plugin_config.html', title=self.title,
menu=self.menu, action=self.url, back=self.back,
message=message, message_type=message_type,
name='admin_%s_%s_form' % (self.facility,
self._po.name),
- options_order=self.options_order,
- plugin=self._po)
+ config=self._po.get_config_obj())
@admin_protect
def GET(self, *args, **kwargs):
@@ -83,31 +64,46 @@ class AdminPluginConfig(AdminPage):
message = "Nothing was modified."
message_type = "info"
- new_values = dict()
-
- # Get the defaults
- options = self._po.get_config_desc()
- if options is None:
- options = dict()
-
- for key, value in kwargs.iteritems():
- if key in options:
- if value != self._po.get_config_value(key):
- cherrypy.log.error("Storing [%s]: %s = %s" %
- (self._po.name, key, value))
- new_values[key] = value
-
- if len(new_values) != 0:
+ new_db_values = dict()
+
+ conf = self._po.get_config_obj()
+
+ for name, option in conf.iteritems():
+ if name in kwargs:
+ value = kwargs[name]
+ if isinstance(option, pconfig.List):
+ value = [x.strip() for x in value.split('\n')]
+ elif isinstance(option, pconfig.Condition):
+ value = True
+ else:
+ if isinstance(option, pconfig.Condition):
+ value = False
+ elif isinstance(option, pconfig.Choice):
+ value = list()
+ for a in option.get_allowed():
+ aname = '%s_%s' % (name, a)
+ if aname in kwargs:
+ value.append(a)
+ else:
+ continue
+
+ if value != option.get_value():
+ cherrypy.log.error("Storing [%s]: %s = %s" %
+ (self._po.name, name, value))
+ option.set_value(value)
+ new_db_values[name] = option.export_value()
+
+ if len(new_db_values) != 0:
# First we try to save in the database
try:
- self._po.save_plugin_config(self.facility, new_values)
+ self._po.save_plugin_config(self.facility, new_db_values)
message = "New configuration saved."
message_type = "success"
except Exception: # pylint: disable=broad-except
message = "Failed to save data!"
message_type = "error"
- # And only if it succeeds we change the live object
+ # Then refresh the actual objects
self._po.refresh_plugin_config(self.facility)
return self.root_with_msg(message=message,
@@ -210,7 +206,7 @@ class AdminPlugins(AdminPage):
po.name = "global"
globalconf = dict()
globalconf['order'] = ','.join(names)
- po.set_config(globalconf)
+ po.import_config(globalconf)
po.save_plugin_config(self.facility)
def reorder_plugins(self, names):