summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimo Sorce <simo@redhat.com>2014-10-10 15:52:01 -0400
committerPatrick Uiterwijk <puiterwijk@redhat.com>2014-10-24 18:02:20 +0200
commitcecf9f6c60a048f4f7c947a969f1610695d1d3be (patch)
tree3f70a3a3aed024a2f5cbca34b39d860b73ef4c7a
parent19d7bd78989ae6ee603ff4f49517fd25f6bc79d0 (diff)
Do not overwrite default plugin options
Change the admin plugin to not overwrite the plugin default options, and only use the sanctioned pluginObject interfaces to read/write config values. Signed-off-by: Simo Sorce <simo@redhat.com> Reviewed-by: Patrick Uiterwijk <puiterwijk@redhat.com>
-rwxr-xr-xipsilon/admin/common.py49
-rwxr-xr-xipsilon/util/plugin.py14
-rw-r--r--templates/admin/plugin_config.html4
3 files changed, 38 insertions, 29 deletions
diff --git a/ipsilon/admin/common.py b/ipsilon/admin/common.py
index 5928763..7f723ac 100755
--- a/ipsilon/admin/common.py
+++ b/ipsilon/admin/common.py
@@ -36,31 +36,27 @@ class AdminPage(Page):
class AdminPluginPage(AdminPage):
- def __init__(self, obj, site, parent):
+ def __init__(self, po, site, parent):
super(AdminPluginPage, self).__init__(site, form=True)
- self._obj = obj
- self.title = '%s plugin' % obj.name
- self.url = '%s/%s' % (parent.url, obj.name)
+ self._po = po
+ self.title = '%s plugin' % po.name
+ self.url = '%s/%s' % (parent.url, po.name)
self.facility = parent.facility
self.menu = [parent]
self.back = parent.url
# Get the defaults
- self.plugin_config = obj.get_config_desc()
- if not self.plugin_config:
- self.plugin_config = dict()
-
- # Now overlay the actual config
- for option in self.plugin_config:
- self.plugin_config[option][2] = obj.get_config_value(option)
+ options = po.get_config_desc()
+ if options is None:
+ options = dict()
self.options_order = []
- if hasattr(obj, 'conf_opt_order'):
- self.options_order = obj.conf_opt_order
+ if hasattr(po, 'conf_opt_order'):
+ self.options_order = po.conf_opt_order
# append any undefined options
add = []
- for k in self.plugin_config.keys():
+ for k in options.keys():
if k not in self.options_order:
add.append(k)
if len(add):
@@ -72,10 +68,10 @@ class AdminPluginPage(AdminPage):
def GET(self, *args, **kwargs):
return self._template('admin/plugin_config.html', title=self.title,
name='admin_%s_%s_form' % (self.facility,
- self._obj.name),
+ self._po.name),
menu=self.menu, action=self.url, back=self.back,
options_order=self.options_order,
- options=self.plugin_config)
+ plugin=self._po)
@admin_protect
def POST(self, *args, **kwargs):
@@ -84,17 +80,22 @@ class AdminPluginPage(AdminPage):
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 self.plugin_config:
- if value != self.plugin_config[key][2]:
+ if key in options:
+ if value != self._po.get_config_value(key):
cherrypy.log.error("Storing [%s]: %s = %s" %
- (self._obj.name, key, value))
+ (self._po.name, key, value))
new_values[key] = value
if len(new_values) != 0:
# First we try to save in the database
try:
- self._obj.save_plugin_config(self.facility, new_values)
+ self._po.save_plugin_config(self.facility, new_values)
message = "New configuration saved."
message_type = "success"
except Exception: # pylint: disable=broad-except
@@ -102,17 +103,15 @@ class AdminPluginPage(AdminPage):
message_type = "error"
# And only if it succeeds we change the live object
- for name, value in new_values.items():
- self._obj.set_config_value(name, value)
- self.plugin_config[name][2] = value
+ self._po.refresh_plugin_config(self.facility)
return self._template('admin/plugin_config.html', title=self.title,
message=message,
message_type=message_type,
name='admin_%s_%s_form' % (self.facility,
- self._obj.name),
+ self._po.name),
menu=self.menu, action=self.url,
- options=self.plugin_config)
+ plugin=self._po)
class Admin(AdminPage):
diff --git a/ipsilon/util/plugin.py b/ipsilon/util/plugin.py
index 903f548..48edf0e 100755
--- a/ipsilon/util/plugin.py
+++ b/ipsilon/util/plugin.py
@@ -115,7 +115,7 @@ class PluginObject(Log):
self._options = None
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.
@@ -124,7 +124,13 @@ class PluginObject(Log):
- 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 set_config(self, config):
self._config = config
@@ -152,6 +158,10 @@ class PluginObject(Log):
def get_plugin_config(self, facility):
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
diff --git a/templates/admin/plugin_config.html b/templates/admin/plugin_config.html
index d95bf75..70d56f0 100644
--- a/templates/admin/plugin_config.html
+++ b/templates/admin/plugin_config.html
@@ -12,9 +12,9 @@
{% for o in options_order %}
<div class="form-group">
<label for="{{ o }}">{{ o }}:</label>
- <input type="text" class="form-control" name="{{ o }}" value="{{ options[o][2] }}">
+ <input type="text" class="form-control" name="{{ o }}" value="{{ plugin.get_config_value(o) }}">
</div>
- <span class="help-block">{{ options[o][0] }}</span>
+ <span class="help-block">{{ plugin.get_config_desc(o) }}</span>
{% endfor %}
<button id="submit" class="btn btn-primary" name="submit" type="submit" value="Submit">