|
@@ -1,6 +1,7 @@
|
|
|
import importlib
|
|
|
from jinja2 import Template
|
|
|
import random
|
|
|
+import os.path
|
|
|
|
|
|
from core import ConfigurationManager
|
|
|
|
|
@@ -9,6 +10,14 @@ class NoTemplateException(Exception):
|
|
|
pass
|
|
|
|
|
|
|
|
|
+class MultipleTemplateException(Exception):
|
|
|
+ pass
|
|
|
+
|
|
|
+
|
|
|
+class TemplateFileNotFoundException(Exception):
|
|
|
+ pass
|
|
|
+
|
|
|
+
|
|
|
class Neurone:
|
|
|
def __init__(self, **kwargs):
|
|
|
# get the name of the plugin
|
|
@@ -31,17 +40,47 @@ class Neurone:
|
|
|
message = random.choice(message)
|
|
|
|
|
|
# Check if there is a template associate to the output message
|
|
|
- template = kwargs.get('say_template', None)
|
|
|
+ say_template = kwargs.get('say_template', None)
|
|
|
+ # check if there is a template file associate to the output message
|
|
|
+ file_template = kwargs.get('file_template', None)
|
|
|
+
|
|
|
+ # we check if the user provide a say_template or a file_template, Not both
|
|
|
+ if say_template is not None and file_template is not None:
|
|
|
+ raise MultipleTemplateException("You must provide a say_template or a file_template, not both")
|
|
|
+
|
|
|
+ # check on of the two option is set
|
|
|
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)
|
|
|
+ if (say_template is not None and file_template is None) or \
|
|
|
+ (say_template is None and file_template is not None):
|
|
|
+ if say_template is not None: # the user choose a say_template option
|
|
|
+ if isinstance(say_template, list):
|
|
|
+ # then we pick randomly one template
|
|
|
+ say_template = random.choice(say_template)
|
|
|
+ t = Template(say_template)
|
|
|
+ message = t.render(**message)
|
|
|
+ if file_template is not None: # the user choose a file_template option
|
|
|
+ real_file_template_path = "templates/%s" % file_template
|
|
|
+ if os.path.isfile(real_file_template_path):
|
|
|
+ # load the content of the file as template
|
|
|
+ t = Template(self._get_content_of_file(real_file_template_path))
|
|
|
+ message = t.render(**message)
|
|
|
+ else:
|
|
|
+ raise TemplateFileNotFoundException("Template file %s not found in templates folder"
|
|
|
+ % real_file_template_path)
|
|
|
+
|
|
|
else:
|
|
|
- raise NoTemplateException("You must specify a say_template to your Neurone for the entries ", message.keys())
|
|
|
+ raise NoTemplateException("You must specify a say_template or a file_template", 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)
|
|
|
+
|
|
|
+ @staticmethod
|
|
|
+ def _check_file_exist(real_file_template):
|
|
|
+ return os.path.isfile(real_file_template)
|
|
|
+
|
|
|
+ @staticmethod
|
|
|
+ def _get_content_of_file(real_file_template_path):
|
|
|
+ with open(real_file_template_path, 'r') as content_file:
|
|
|
+ return content_file.read()
|