Kaynağa Gözat

Merge pull request #264 from kalliope-project/263_encoding_serialize_launcher

[Fix] #263 encoding on neuron launcher and serialize + add test
Nicolas Marcq 7 yıl önce
ebeveyn
işleme
06346a1d6c

+ 18 - 0
Tests/test_neuron_launcher.py

@@ -1,3 +1,5 @@
+# coding: utf-8
+
 import unittest
 import mock
 
@@ -94,6 +96,22 @@ class TestNeuronLauncher(unittest.TestCase):
             "param1": "this is a value replaced successfully"
         }
 
+        self.assertEqual(expected_result, NeuronLauncher._replace_brackets_by_loaded_parameter(neuron_parameters,
+                                                                                               loaded_parameters))
+
+        # the target value with unicode to replace is present in the loaded parameter dict
+        neuron_parameters = {
+            "param1": "this is a value {{ replaced }}"
+        }
+
+        loaded_parameters = {
+            "replaced": u"rêmpläcée successfülly"
+        }
+
+        expected_result = {
+            "param1": "this is a value rêmpläcée successfülly"
+        }
+
         self.assertEqual(expected_result, NeuronLauncher._replace_brackets_by_loaded_parameter(neuron_parameters,
                                                                                                loaded_parameters))
 

+ 14 - 0
Tests/test_utils.py

@@ -4,6 +4,8 @@
 import unittest
 import os
 
+import sys
+
 from kalliope.core.Models.Neuron import Neuron
 from kalliope.neurons.say.say import Say
 from kalliope.core.Utils.Utils import Utils
@@ -223,3 +225,15 @@ class TestUtils(unittest.TestCase):
         self.assertEqual(Utils.remove_spaces_in_brackets(sentence=sentence),
                          expected_result,
                          "Fail to remove spaces in two brackets")
+
+    def test_encode_text_utf8(self):
+        """
+        Test encoding the text in utf8
+        """
+        sentence = "kâllìöpé"
+        if sys.version_info[0] < 3:
+            sentence = sentence.decode('utf8')
+        expected_sentence = "kâllìöpé"
+
+        self.assertEqual(Utils.encode_text_utf8(text=sentence),
+                         expected_sentence)

+ 3 - 0
kalliope/core/Models/APIResponse.py

@@ -1,3 +1,4 @@
+from kalliope.core.Utils import Utils
 
 
 class APIResponse(object):
@@ -16,6 +17,8 @@ class APIResponse(object):
         :return: A dict of name and parameters
         :rtype: Dict
         """
+
+        self.user_order = Utils.encode_text_utf8(self.user_order)
         return {
             'user_order': self.user_order,
             'matched_synapses': [e.serialize() for e in self.list_processed_matched_synapse],

+ 2 - 0
kalliope/core/NeuronLauncher.py

@@ -1,6 +1,7 @@
 import logging
 import six
 import jinja2
+import sys
 
 from kalliope.core.Utils.Utils import Utils
 from kalliope.core.ConfigurationManager.SettingLoader import SettingLoader
@@ -72,6 +73,7 @@ class NeuronLauncher:
                 # check that the parameter to replace is available in the loaded_parameters dict
                 if cls._neuron_parameters_are_available_in_loaded_parameters(neuron_parameters, loaded_parameters):
                     neuron_parameters = jinja2.Template(neuron_parameters).render(loaded_parameters)
+                    neuron_parameters = Utils.encode_text_utf8(neuron_parameters)
                     return str(neuron_parameters)
                 else:
                     raise NeuronParameterNotAvailable

+ 1 - 1
kalliope/core/NeuronModule.py

@@ -113,6 +113,7 @@ class NeuronModule(object):
         :return: A dict of name and parameters
         :rtype: Dict
         """
+        self.tts_message = Utils.encode_text_utf8(self.tts_message)
         return {
             'neuron_name': self.neuron_name,
             'generated_message': self.tts_message
@@ -137,7 +138,6 @@ class NeuronModule(object):
             logger.debug("message is string")
             tts_message = message
 
-
         if isinstance(message, list):
             logger.debug("message is list")
             tts_message = random.choice(message)

+ 13 - 2
kalliope/core/Utils/Utils.py

@@ -11,8 +11,7 @@ logger = logging.getLogger("kalliope")
 
 
 def pipe_print(line):
-    if sys.version_info[0] < 3:
-        line = line.encode('utf-8')
+    line = Utils.encode_text_utf8(line)
     print(line)
 
 
@@ -289,3 +288,15 @@ class Utils(object):
         ite = list_to_check.__iter__()
         next(ite, None)
         return next(ite, None)
+
+    ##################
+    #
+    # Encoding
+    #
+    #########
+    @staticmethod
+    def encode_text_utf8(text):
+        if sys.version_info[0] < 3:
+            if isinstance(text, unicode):
+                text = text.encode("utf-8")
+        return text