Jelajahi Sumber

[Feature] #322 add signal community management

ThiBuff 7 tahun lalu
induk
melakukan
5c79f6a12a
3 mengubah file dengan 55 tambahan dan 14 penghapusan
  1. 19 0
      Tests/test_resources_manager.py
  2. 17 5
      kalliope/__init__.py
  3. 19 9
      kalliope/core/ResourcesManager.py

+ 19 - 0
Tests/test_resources_manager.py

@@ -47,6 +47,13 @@ class TestResourcesmanager(unittest.TestCase):
         dna.module_type = "trigger"
         self.assertTrue(ResourcesManager.is_settings_ok(valid_resource, dna))
 
+        # valid signal
+        valid_resource = Resources()
+        valid_resource.signal_folder = "/path"
+        dna = Dna()
+        dna.module_type = "signal"
+        self.assertTrue(ResourcesManager.is_settings_ok(valid_resource, dna))
+
         # -----------------
         # invalid resource
         # -----------------
@@ -78,6 +85,13 @@ class TestResourcesmanager(unittest.TestCase):
         dna.module_type = "trigger"
         self.assertFalse(ResourcesManager.is_settings_ok(valid_resource, dna))
 
+        # valid signal
+        valid_resource = Resources()
+        valid_resource.signal_folder = None
+        dna = Dna()
+        dna.module_type = "signal"
+        self.assertFalse(ResourcesManager.is_settings_ok(valid_resource, dna))
+
     def test_is_repo_ok(self):
         # valid repo
         if "/Tests" in os.getcwd():
@@ -127,6 +141,11 @@ class TestResourcesmanager(unittest.TestCase):
         resources.trigger_folder = '/var/tmp/test/resources'
         self.assertEqual(ResourcesManager._get_target_folder(resources, "trigger"), "/var/tmp/test/resources")
 
+        # test get signal folder
+        resources = Resources()
+        resources.signal_folder = '/var/tmp/test/resources'
+        self.assertEqual(ResourcesManager._get_target_folder(resources, "signal"), "/var/tmp/test/resources")
+
         # test get non existing resource
         resources = Resources()
         self.assertIsNone(ResourcesManager._get_target_folder(resources, "not_existing"))

+ 17 - 5
kalliope/__init__.py

@@ -60,6 +60,7 @@ def parse_args(args):
     parser.add_argument("--stt-name", help="STT name to uninstall")
     parser.add_argument("--tts-name", help="TTS name to uninstall")
     parser.add_argument("--trigger-name", help="Trigger name to uninstall")
+    parser.add_argument("--signal-name", help="Signal name to uninstall")
     parser.add_argument('-v', '--version', action='version',
                         version='Kalliope ' + version_str)
 
@@ -108,14 +109,25 @@ def main():
 
     # uninstall modules
     if parser.action == "uninstall":
-        if not parser.neuron_name and not parser.stt_name and not parser.tts_name and not parser.trigger_name:
-            Utils.print_danger("You must specify a module name with --neuron-name or --stt-name or --tts-name "
-                               "or --trigger-name")
+        if not parser.neuron_name \
+                and not parser.stt_name \
+                and not parser.tts_name \
+                and not parser.trigger_name\
+                and not parser.signal_name:
+            Utils.print_danger("You must specify a module name with "
+                               "--neuron-name "
+                               "or --stt-name "
+                               "or --tts-name "
+                               "or --trigger-name "
+                               "or --signal-name")
             sys.exit(1)
         else:
             res_manager = ResourcesManager()
-            res_manager.uninstall(neuron_name=parser.neuron_name, stt_name=parser.stt_name,
-                                  tts_name=parser.tts_name, trigger_name=parser.trigger_name)
+            res_manager.uninstall(neuron_name=parser.neuron_name,
+                                  stt_name=parser.stt_name,
+                                  tts_name=parser.tts_name,
+                                  trigger_name=parser.trigger_name,
+                                  signal_name=parser.signal_name)
         return
 
     # load the brain once

+ 19 - 9
kalliope/core/ResourcesManager.py

@@ -32,7 +32,7 @@ TYPE_NEURON = "neuron"
 TYPE_TTS = "tts"
 TYPE_STT = "stt"
 TYPE_TRIGGER = "trigger"
-
+TYPE_SIGNAL = "signal"
 
 class ResourcesManagerException(Exception):
     pass
@@ -103,7 +103,11 @@ class ResourcesManager(object):
                                  % str(self.tmp_path))
                     shutil.rmtree(self.tmp_path)
 
-    def uninstall(self, neuron_name=None, tts_name=None, stt_name=None, trigger_name=None):
+    def uninstall(self, neuron_name=None,
+                  tts_name=None,
+                  stt_name=None,
+                  trigger_name=None,
+                  signal_name= None):
         """
         Uninstall a community resource
         """
@@ -111,21 +115,26 @@ class ResourcesManager(object):
         module_name = ""
         if neuron_name is not None:
             target_path_to_delete = self._get_target_folder(resources=self.settings.resources,
-                                                            module_type="neuron")
+                                                            module_type=TYPE_NEURON)
             module_name = neuron_name
         if tts_name is not None:
             target_path_to_delete = self._get_target_folder(resources=self.settings.resources,
-                                                            module_type="neuron")
+                                                            module_type=TYPE_TTS)
             module_name = tts_name
         if stt_name is not None:
             target_path_to_delete = self._get_target_folder(resources=self.settings.resources,
-                                                            module_type="neuron")
+                                                            module_type=TYPE_STT)
             module_name = stt_name
         if trigger_name is not None:
             target_path_to_delete = self._get_target_folder(resources=self.settings.resources,
-                                                            module_type="neuron")
+                                                            module_type=TYPE_TRIGGER)
             module_name = trigger_name
 
+        if signal_name is not None:
+            target_path_to_delete = self._get_target_folder(resources=self.settings.resources,
+                                                            module_type=TYPE_SIGNAL)
+            module_name = signal_name
+
         if target_path_to_delete is not None:
             try:
                 shutil.rmtree(target_path_to_delete + os.sep + module_name.lower())
@@ -173,7 +182,7 @@ class ResourcesManager(object):
                 logger.debug(message)
                 Utils.print_danger(message)
                 settings_ok = False
-            if dna.module_type == "signal" and resources.signal is None:
+            if dna.module_type == "signal" and resources.signal_folder is None:
                 message = "Resources folder for signal installation not set in settings, cannot install."
                 logger.debug(message)
                 Utils.print_danger(message)
@@ -206,7 +215,7 @@ class ResourcesManager(object):
         Return the folder from the resources and given a module type
         :param resources: Resource object
         :type resources: Resources
-        :param module_type: type of the module (TYPE_NEURON, TYPE_STT, TYPE_TTS, TYPE_TRIGGER)
+        :param module_type: type of the module (TYPE_NEURON, TYPE_STT, TYPE_TTS, TYPE_TRIGGER, TYPE_SIGNAL)
         :return: path of the folder
         """
         module_type_converter = dict()
@@ -216,7 +225,8 @@ class ResourcesManager(object):
                 TYPE_NEURON: resources.neuron_folder,
                 TYPE_STT: resources.stt_folder,
                 TYPE_TTS: resources.tts_folder,
-                TYPE_TRIGGER: resources.trigger_folder
+                TYPE_TRIGGER: resources.trigger_folder,
+                TYPE_SIGNAL: resources.signal_folder
             }
         except AttributeError:
             # will be raised if the resource folder is not set in settings