From fb1c34e7aeac67a75c29a132ded87edeb557cdaf Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Wed, 15 Oct 2014 00:17:53 -0400 Subject: Improve UI for enabling/disabling plugins config Use the same templates for both info and login plugins Signed-off-by: Simo Sorce Reviewed-by: Patrick Uiterwijk --- ipsilon/admin/info.py | 144 ++------------------------------------------------ 1 file changed, 3 insertions(+), 141 deletions(-) (limited to 'ipsilon/admin/info.py') diff --git a/ipsilon/admin/info.py b/ipsilon/admin/info.py index d3f5284..bda117a 100755 --- a/ipsilon/admin/info.py +++ b/ipsilon/admin/info.py @@ -2,149 +2,11 @@ # # Copyright (C) 2014 Ipsilon Contributors see COPYING for license -import cherrypy -from ipsilon.util.page import admin_protect -from ipsilon.util.plugin import PluginObject -from ipsilon.admin.common import AdminPluginPage -from ipsilon.admin.common import AdminPage +from ipsilon.admin.common import AdminPlugins from ipsilon.info.common import FACILITY -def save_enabled_plugins(names): - po = PluginObject() - po.name = "global" - globalconf = dict() - globalconf['order'] = ','.join(names) - po.set_config(globalconf) - po.save_plugin_config(FACILITY) - - -class InfoPluginsOrder(AdminPage): - +class InfoPlugins(AdminPlugins): def __init__(self, site, parent): - super(InfoPluginsOrder, self).__init__(site, form=True) - self.url = '%s/order' % parent.url - self.menu = [parent] - - @admin_protect - def GET(self, *args, **kwargs): - opts = [p.name for p in self._site[FACILITY]['enabled']] - return self._template('admin/info_order.html', - title='info plugins order', - name='admin_info_order_form', - menu=self.menu, action=self.url, - options=opts) - - @admin_protect - def POST(self, *args, **kwargs): - message = "Nothing was modified." - message_type = "info" - plugins_by_name = {p.name: p for p in self._site[FACILITY]['enabled']} - - if 'order' in kwargs: - order = kwargs['order'].split(',') - if len(order) != 0: - new_names = [] - new_plugins = [] - try: - for v in order: - val = v.strip() - if val not in plugins_by_name: - error = "Invalid plugin name: %s" % val - raise ValueError(error) - new_names.append(val) - new_plugins.append(plugins_by_name[val]) - if len(new_names) < len(plugins_by_name): - for val in plugins_by_name: - if val not in new_names: - new_names.append(val) - new_plugins.append(plugins_by_name[val]) - - save_enabled_plugins(new_names) - - # When all is saved update also live config. The - # live config is a list of the actual plugin - # objects. - self._site[FACILITY]['enabled'] = new_plugins - - message = "New configuration saved." - message_type = "success" - - except ValueError, e: - message = str(e) - message_type = "error" - - except Exception, e: # pylint: disable=broad-except - message = "Failed to save data!" - message_type = "error" - - opts = [p.name for p in self._site[FACILITY]['enabled']] - return self._template('admin/info_order.html', - message=message, - message_type=message_type, - title='info plugins order', - name='admin_info_order_form', - menu=self.menu, action=self.url, - options=opts) - - -class InfoPlugins(AdminPage): - def __init__(self, site, parent): - super(InfoPlugins, self).__init__(site) - self._master = parent + super(InfoPlugins, self).__init__('info', site, parent, FACILITY) self.title = 'Info Plugins' - self.url = '%s/info' % parent.url - self.facility = FACILITY - parent.add_subtree('info', self) - - for plugin in self._site[FACILITY]['available']: - cherrypy.log.error('Admin info plugin: %s' % plugin) - obj = self._site[FACILITY]['available'][plugin] - self.__dict__[plugin] = AdminPluginPage(obj, self._site, self) - - self.order = InfoPluginsOrder(self._site, self) - - def root_with_msg(self, message=None, message_type=None): - info_plugins = self._site[FACILITY] - ordered = [] - for p in info_plugins['enabled']: - ordered.append(p.name) - return self._template('admin/info.html', title=self.title, - message=message, - message_type=message_type, - available=info_plugins['available'], - enabled=ordered, - menu=self._master.menu) - - def root(self, *args, **kwargs): - return self.root_with_msg() - - @admin_protect - def enable(self, plugin): - msg = None - plugins = self._site[FACILITY] - if plugin not in plugins['available']: - msg = "Unknown plugin %s" % plugin - return self.root_with_msg(msg, "error") - obj = plugins['available'][plugin] - if obj not in plugins['enabled']: - obj.enable(self._site) - save_enabled_plugins(list(x.name for x in plugins['enabled'])) - msg = "Plugin %s enabled" % obj.name - return self.root_with_msg(msg, "success") - enable.public_function = True - - @admin_protect - def disable(self, plugin): - msg = None - plugins = self._site[FACILITY] - if plugin not in plugins['available']: - msg = "Unknown plugin %s" % plugin - return self.root_with_msg(msg, "error") - obj = plugins['available'][plugin] - if obj in plugins['enabled']: - obj.disable(self._site) - save_enabled_plugins(list(x.name for x in plugins['enabled'])) - msg = "Plugin %s disabled" % obj.name - return self.root_with_msg(msg, "success") - disable.public_function = True -- cgit