浏览代码

use the dynamic class loader from Utils instead of local function

nico 8 年之前
父节点
当前提交
3633215623
共有 3 个文件被更改,包括 13 次插入81 次删除
  1. 2 14
      core/NeuronModule.py
  2. 4 39
      core/NeuroneLauncher.py
  3. 7 28
      core/OrderListener.py

+ 2 - 14
core/NeuronModule.py

@@ -5,6 +5,7 @@ import random
 
 from jinja2 import Template
 
+from core.Utils import Utils
 from core.ConfigurationManager import SettingLoader
 
 logging.basicConfig()
@@ -147,20 +148,7 @@ class NeuronModule(object):
 
     @staticmethod
     def _get_tts_instance(tts_name):
-        # capitalise for loading module name
-        tts = tts_name.capitalize()
-        logger.debug("Import TTS module named %s " % tts)
-        mod = __import__('tts', fromlist=[str(tts)])
-        try:
-            klass = getattr(mod, tts)
-        except ImportError, e:
-            raise TTSModuleNotFound("The TTS not found: %s" % e)
-
-        if klass is not None:
-            # run the plugin
-            return klass()
-        else:
-            raise TTSNotInstantiable("TTS module %s not instantiable" % tts)
+        return Utils.get_dynamic_class_instantiation("tts", tts_name.capitalize())
 
     @staticmethod
     def _update_cache_var(new_override_cache, args_list):

+ 4 - 39
core/NeuroneLauncher.py

@@ -1,5 +1,7 @@
 import logging
 
+from core.Utils import Utils
+
 logging.basicConfig()
 logger = logging.getLogger("jarvis")
 
@@ -8,31 +10,6 @@ class NeuroneNotFoundError(Exception):
     pass
 
 
-def _run_plugin(plugin, parameters=None):
-    """
-    Dynamic loading of a module
-    :param plugin: Module name to load
-    :param parameters: Parameter of the module
-    :return:
-    """
-    logger.debug("Run plugin %s with parameter %s" % (plugin, parameters))
-    mod = __import__('neurons', fromlist=[plugin])
-    try:
-        klass = getattr(mod, plugin)
-    except AttributeError:
-        logger.debug("Error: No module named %s " % plugin)
-        raise NeuroneNotFoundError
-
-    if klass is not None:
-        # run the plugin
-        if not parameters:
-            klass()
-        elif isinstance(parameters, dict):
-            klass(**parameters)
-        else:
-            klass(parameters)
-
-
 class NeuroneLauncher:
 
     def __init__(self):
@@ -46,18 +23,6 @@ class NeuroneLauncher:
         :type neuron: Neurone
         :return:
         """
-        plugin = neuron.name.capitalize()
-        plugin = plugin.capitalize()
-        _run_plugin(plugin, neuron.parameters)
-
-        # if isinstance(neuron, dict):
-        #     for plugin, parameters in neuron.items():
-        #         # capitalizes the first letter (because classes have first letter upper case)
-        #         plugin = plugin.capitalize()
-        #         _run_plugin(plugin, parameters)
-        # else:
-        #     plugin = neuron
-        #     # capitalizes the first letter (because classes have first letter upper case)
-        #     plugin = plugin.capitalize()
-        #     _run_plugin(plugin)
+        logger.debug("Run plugin \"%s\" with parameters %s" % (neuron.name, neuron.parameters))
+        return Utils.get_dynamic_class_instantiation("neurons", neuron.name.capitalize(), neuron.parameters)
 

+ 7 - 28
core/OrderListener.py

@@ -2,6 +2,7 @@ import logging
 import os
 from cffi import FFI as _FFI
 
+from core.Utils import Utils
 from core.ConfigurationManager import SettingLoader
 
 logging.basicConfig()
@@ -28,36 +29,14 @@ class OrderListener:
 
     def load_stt_plugin(self):
         if self.stt is None:
-            self.stt = self.settings.default_stt_name
+            self.stt_module_name = self.settings.default_stt_name
 
         for stt_object in self.settings.stts:
-            if stt_object.name == self.stt:
-                stt_args = stt_object.parameters
-
-        # capitalizes the first letter (because classes have first letter upper case)
-        default_stt_plugin = self.stt.capitalize()
-        self._run_stt_plugin(default_stt_plugin, stt_args)
-
-    def _run_stt_plugin(self, stt_plugin, parameters=None):
-        """
-        Dynamic loading of a STT module
-        :param stt_plugin: Module name to load
-        :param parameters: Parameter of the module
-        :return:
-        """
-        logger.debug("Running STT %s with parameter %s" % (stt_plugin, parameters))
-        mod = __import__('stt', fromlist=[stt_plugin])
-
-        klass = getattr(mod, stt_plugin)
-
-        if klass is not None:
-            # run the plugin
-            if not parameters:
-                klass(self.callback)
-            elif isinstance(parameters, dict):
-                klass(self.callback, **parameters)
-            else:
-                klass(self.callback, parameters)
+            if stt_object.name == self.stt_module_name:
+                stt_object.parameters["callback"] = self.callback
+                Utils.get_dynamic_class_instantiation('stt',
+                                                      stt_object.name.capitalize(),
+                                                      parameters=stt_object.parameters)
 
     @staticmethod
     def _ignore_stderr():