Эх сурвалжийг харах

[Feature]--> manage say_template for output of a neurone [Refacto]--> Neurone main class + Say plugin

monf 8 жил өмнө
parent
commit
a05cce9fe2

+ 1 - 0
Docs/dev_env_install.md

@@ -32,4 +32,5 @@ pip install pyaudio
 pip install ansible
 pip install pygame
 pip install python2-pythondialog
+pip install jinja
 ```

+ 8 - 2
brain.yml

@@ -4,7 +4,7 @@
       - say:
           message:
             - "Bonjour monsieur"
-            - "Bonjour Nicolas"
+            - "Bonjour maitre"
       - sleep:
           seconds: 1
       - say:
@@ -18,6 +18,7 @@
       - say:
           message:
             - "42"
+          tts: "voxygen"
     when:
       - order: "sens de la vie"
 
@@ -32,7 +33,12 @@
 
   - name: "Say local date"
     neurons:
-      - systemdate
+      - systemdate:
+          say_template:
+            - "il est {{ hours }} heures et {{ minutes }} minutes"
+            - "{{ hours }} heures et {{ minutes }} minutes praicizaiman"
+            - "ma montre indique {{ hours }} heures et {{ minutes }} minutes"
+          tts: "voxygen"
     when:
       - order: "quelle heure"
 

+ 32 - 7
neurons/Neurone.py

@@ -1,22 +1,47 @@
 import importlib
+from jinja2 import Template
+import random
 
 from core import ConfigurationManager
 
 
+class NoTemplateException(Exception):
+    pass
+
+
 class Neurone:
-    def __init__(self, tts=None):
+    def __init__(self, **kwargs):
         # get the name of the plugin
         # print self.__class__.__name__
         # load the tts from settings
-        self.tts = tts
-        if tts is None:
-            self.tts = ConfigurationManager.get_default_text_to_speech()
+        self.tts = ConfigurationManager.get_default_text_to_speech()
         # get tts args
         self.tts_args = ConfigurationManager.get_tts_args(self.tts)
 
-    def say(self, message):
+    def say(self, message, kwargs):
+        # get the tts if is specified otherwise use default
+        tts = kwargs.get('tts', None)
+        if tts is not None:
+            self.tts = tts
+            self.tts_args = ConfigurationManager.get_tts_args(self.tts)
+
+        # check if it's a single message or multiple one
+        if isinstance(message, list):
+            # then we pick randomly one message
+            message = random.choice(message)
+
+        # Check if there is a template associate to the output message
+        template = kwargs.get('say_template', None)
+        if isinstance(message, dict):
+            if template is not None:
+                if isinstance(template, list):
+                    # then we pick randomly one template
+                    template = random.choice(template)
+                t = Template(template)
+                message = t.render(**message)
+            else:
+                raise NoTemplateException("You must specify a say_template to your Neurone for the entries ", message.keys())
         # here we use the tts to make jarvis talk
         # the module is imported on fly, depending on the selected tts from settings
         tts_backend = importlib.import_module("tts." + self.tts)
-        tts_backend.say(words=message, **self.tts_args)
-
+        tts_backend.say(words=message, **self.tts_args)

+ 2 - 11
neurons/say/say.py

@@ -1,5 +1,4 @@
 from neurons import Neurone
-import random
 
 
 class NoMessageException(Exception):
@@ -8,19 +7,11 @@ class NoMessageException(Exception):
 
 class Say(Neurone):
     def __init__(self, *args , **kwargs):
-        # get the tts if is specified
-        tts = kwargs.get('tts', None)
-        Neurone.__init__(self, tts=tts)
-
+        Neurone.__init__(self)
         # get message to spell out loud
         message = kwargs.get('message', None)
         # user must specify a message
         if message is None:
             raise NoMessageException("You must specify a message string or a list of messages as parameter")
         else:
-            # check if it's a single message or multiple one
-            if isinstance(message, list):
-                # then we play randomly one message
-                self.say(random.choice(message))
-            else:
-                self.say(message)
+            self.say(message, kwargs)

+ 8 - 4
neurons/systemdate/systemdate.py

@@ -5,9 +5,13 @@ from neurons import Neurone
 
 
 class Systemdate(Neurone):
-    def __init__(self):
-        Neurone.__init__(self)
+    def __init__(self, *args , **kwargs):
+        Neurone.__init__(self, **kwargs)
         hour = time.strftime("%H")
         minute = time.strftime("%M")
-        message = "Il est %s heure %s" % (hour, minute)
-        self.say(message)
+
+        message = {
+            "hours":hour,
+            "minutes":minute
+        }
+        self.say(message, kwargs)

+ 8 - 4
test.py

@@ -7,8 +7,12 @@ from neurons import Say
 from neurons.ansible_tasks.ansible_tasks import Ansible_tasks
 import logging
 
-from core import ShellGui
+#from core import ShellGui
+from jinja2 import Template
+import time
 
-
-
-shelgui = ShellGui()
+hour = time.strftime("%H")
+minute = time.strftime("%M")
+t = Template("il est {{ hour }} heures et {{ minutes }}!")
+uu= t.render(hour=hour, minutes=minute)
+print uu

+ 0 - 1
tts/pico2wave/pico2wave.py

@@ -1,5 +1,4 @@
 import subprocess
-import os
 from core import AudioPlayer
 
 AUDIO_FREQUENCY = 16000