[Kimchi-devel] [PATCH][Wok 4/5] Implements control/model of new plugin API

Rodrigo Trujillo rodrigo.trujillo at linux.vnet.ibm.com
Tue May 31 17:51:37 UTC 2016


Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo at linux.vnet.ibm.com>
---
 src/wok/control/plugins.py | 19 ++++++++++++++++---
 src/wok/i18n.py            |  3 +++
 src/wok/model/plugins.py   | 30 ++++++++++++++++++++++++------
 3 files changed, 43 insertions(+), 9 deletions(-)

diff --git a/src/wok/control/plugins.py b/src/wok/control/plugins.py
index 57dfa1b..c7c9554 100644
--- a/src/wok/control/plugins.py
+++ b/src/wok/control/plugins.py
@@ -19,11 +19,24 @@
 # License along with this library; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
 
-from wok.control.base import SimpleCollection
+from wok.control.base import Collection, Resource
 from wok.control.utils import UrlSubNode
 
 
- at UrlSubNode("plugins")
-class Plugins(SimpleCollection):
+ at UrlSubNode("pluginsmanager")
+class Plugins(Collection):
     def __init__(self, model):
         super(Plugins, self).__init__(model)
+        self.resource = Plugin
+
+
+class Plugin(Resource):
+    def __init__(self, model, id):
+        super(Plugin, self).__init__(model, id)
+        self.uri_fmt = "/pluginsmanager/%s"
+        self.enable = self.generate_action_handler('enable')
+        self.disable = self.generate_action_handler('disable')
+
+    @property
+    def data(self):
+        return self.info
diff --git a/src/wok/i18n.py b/src/wok/i18n.py
index 4fc21f1..bda3949 100644
--- a/src/wok/i18n.py
+++ b/src/wok/i18n.py
@@ -60,4 +60,7 @@ messages = {
     "WOKRES0001L": _("Request made on resource"),
     "WOKROOT0001L": _("User '%(username)s' logged in"),
     "WOKROOT0002L": _("User '%(username)s' logged out"),
+
+    "WOKPLUG0001E": _("Plugin '%(plugin_name)s' not found."),
+    "WOKPLUG0002E": _("Error updating configuration file of plugin '%(plugin)s'."),
 }
diff --git a/src/wok/model/plugins.py b/src/wok/model/plugins.py
index 4beff44..1842dbc 100644
--- a/src/wok/model/plugins.py
+++ b/src/wok/model/plugins.py
@@ -19,9 +19,9 @@
 # License along with this library; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
 
-import cherrypy
 
-from wok.utils import get_enabled_plugins
+from wok.exception import NotFoundError
+from wok.pluginsmanager import Plugins
 
 
 class PluginsModel(object):
@@ -29,7 +29,25 @@ class PluginsModel(object):
         pass
 
     def get_list(self):
-        # Will only return plugins that were loaded correctly by WOK and are
-        # properly configured in cherrypy
-        return [plugin for (plugin, config) in get_enabled_plugins()
-                if config.get('wok').get('uri') in cherrypy.tree.apps.keys()]
+        return Plugins().get_all_plugins_names()
+
+
+class PluginModel(object):
+    def __init__(self, **kargs):
+        pass
+
+    def lookup(self, plugin):
+        info = Plugins().get_plugin_info(plugin)
+        if not info:
+            raise NotFoundError('WOKPLUG0001E', {'plugin_name': plugin})
+
+        return {'name': plugin,
+                'enabled': info['enabled']}
+
+    def enable(self, plugin_name):
+        print "Enabling %s" % plugin_name
+        Plugins().enable_plugin(plugin_name)
+
+    def disable(self, plugin_name):
+        print "Disabling %s" % plugin_name
+        Plugins().disable_plugin(plugin_name)
-- 
2.1.0




More information about the Kimchi-devel mailing list