Bläddra i källkod

add back forwarded parameters to neutotimer due to cortex memory overridding #361

nico 7 år sedan
förälder
incheckning
4a81fdcc70

+ 4 - 4
brain_examples/neurotimer.yml

@@ -39,9 +39,9 @@
       - neurotimer:
           seconds: "{{ time }}"
           synapse: "remember-todo"
-          kalliope_memory:
-            - remember: "{{ remember }}"
-            - time: "{{ time }}"
+          forwarded_parameters:
+            remember: "{{ remember }}"
+            time: "{{ time }}"
       - say:
           message:
             - "je vous le rappel dans {{ time }} secondes"
@@ -51,4 +51,4 @@
     neurons:
       - say:
           message:
-            - "Vous m'avez demandé de vous rappeler de {{ kalliope_memory['remember'] }} il y a {{ kalliope_memory['time'] }} secondes"
+            - "Vous m'avez demandé de vous rappeler de {{ remember }} il y a {{ time }} secondes"

+ 5 - 4
kalliope/core/NeuronModule.py

@@ -5,14 +5,13 @@ import sys
 
 import six
 from jinja2 import Template
-from kalliope.core.LIFOBuffer import LIFOBuffer
 
 from kalliope.core import OrderListener
 from kalliope.core.ConfigurationManager import SettingLoader, BrainLoader
 from kalliope.core.Cortex import Cortex
+from kalliope.core.LIFOBuffer import LIFOBuffer
 from kalliope.core.Models.MatchedSynapse import MatchedSynapse
 from kalliope.core.OrderAnalyser import OrderAnalyser
-from kalliope.core.SynapseLauncher import SynapseLauncher
 from kalliope.core.Utils.RpiUtils import RpiUtils
 from kalliope.core.Utils.Utils import Utils
 
@@ -233,7 +232,7 @@ class NeuronModule(object):
 
     @staticmethod
     def run_synapse_by_name(synapse_name, user_order=None, synapse_order=None, high_priority=False,
-                            is_api_call=False):
+                            is_api_call=False, overriding_parameter_dict=None):
         """
         call the lifo for adding a synapse to execute in the list of synapse list to process
         :param synapse_name: The name of the synapse to run
@@ -241,11 +240,13 @@ class NeuronModule(object):
         :param synapse_order: The synapse order
         :param high_priority: If True, the synapse is executed before the end of the current synapse list
         :param is_api_call: If true, the current call comes from the api
+        :param overriding_parameter_dict: dict of value to add to neuron parameters
         """
         synapse = BrainLoader().get_brain().get_synapse_by_name(synapse_name)
         matched_synapse = MatchedSynapse(matched_synapse=synapse,
                                          matched_order=synapse_order,
-                                         user_order=user_order)
+                                         user_order=user_order,
+                                         overriding_parameter=overriding_parameter_dict)
 
         list_synapse_to_process = list()
         list_synapse_to_process.append(matched_synapse)

+ 5 - 4
kalliope/neurons/neurotimer/README.md

@@ -16,6 +16,7 @@ CORE NEURON : No installation needed.
 | minutes              | NO       | int    |         | value > 0 | Number of minutes to wait before running the synapse         |
 | hours                | NO       | int    |         | value > 0 | Number of hours to wait before running the synapse           |
 | synapse              | YES      | string |         |           | Name of the synapse to run after the selected delay          |
+| forwarded_parameters | NO       | dict   |         |           | dict of parameters that will be passed to the called synapse |
 
 ## Return Values
 
@@ -79,7 +80,7 @@ If your STT engine return integer when capturing a spoken order, you can set the
           - "You asked me to notify you" 
 ```
 
-Passing argument to the called synapse with the `kalliope_memory`.
+Passing argument to the called synapse with the `forwarded_parameters`.
 **Scenario:** You want to remember to do something
 > **You:** remind me to call mom in 15 minutes<br>
 **Kalliope:** I'll notify you in 15 minutes<br>
@@ -93,7 +94,7 @@ Passing argument to the called synapse with the `kalliope_memory`.
     - neurotimer:
         seconds: "{{ time }}"
         synapse: "remember-todo"
-        kalliope_memory:
+        forwarded_parameters:
           remember: "{{ remember }}"
           seconds: "{{ time }}"
     - say:
@@ -106,9 +107,9 @@ Passing argument to the called synapse with the `kalliope_memory`.
   neurons:
     - say:
         message:
-          - "You asked me to remind you to {{ kalliope_memory['remember'] }} {{ kalliope_memory['time'] }} minutes ago"
+          - "You asked me to remind you to {{ remember }} {{ time }} minutes ago"
 ```
-
+> **Note:** You can still use the **kalliope_memory** instead of **forwarded_parameters** but your value will be overridden if you call the same synapse a multiple time.
 
 ## Notes
 

+ 11 - 5
kalliope/neurons/neurotimer/neurotimer.py

@@ -1,11 +1,10 @@
 import logging
+import sys
 import threading
-
 import time
 
-from kalliope.core.NeuronModule import MissingParameterException, InvalidParameterException
-
 from kalliope.core import NeuronModule
+from kalliope.core.NeuronModule import MissingParameterException, InvalidParameterException
 
 logging.basicConfig()
 logger = logging.getLogger("kalliope")
@@ -39,6 +38,7 @@ class Neurotimer(NeuronModule):
         self.minutes = kwargs.get('minutes', None)
         self.hours = kwargs.get('hours', None)
         self.synapse = kwargs.get('synapse', None)
+        self.forwarded_parameter = kwargs.get('forwarded_parameters', None)
 
         # do some check
         if self._is_parameters_ok():
@@ -116,5 +116,11 @@ class Neurotimer(NeuronModule):
         :return:
         """
         logger.debug("[Neurotimer] waiting time is over, start the synapse %s" % self.synapse)
-
-        self.run_synapse_by_name(synapse_name=self.synapse, high_priority=False)
+        # trick to remove unicode problem when loading jinja template with non ascii char
+        if sys.version_info[0] == 2:
+            reload(sys)
+            sys.setdefaultencoding('utf-8')
+
+        self.run_synapse_by_name(synapse_name=self.synapse,
+                                 high_priority=False,
+                                 overriding_parameter_dict=self.forwarded_parameter)