SettingLoader.py 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. from YAMLLoader import YAMLLoader
  2. import logging
  3. from core.Models.Settings import Settings
  4. from core.Models.Stt import Stt
  5. from core.Models.Trigger import Trigger
  6. from core.Models.Tts import Tts
  7. FILE_NAME = "settings.yml"
  8. logging.basicConfig()
  9. logger = logging.getLogger("jarvis")
  10. class NullSettingException(Exception):
  11. pass
  12. class SettingNotFound(Exception):
  13. pass
  14. class SettingLoader(object):
  15. def __init__(self):
  16. pass
  17. @classmethod
  18. def get_yaml_config(cls, file_path=None):
  19. if file_path is None:
  20. file_path = "../../" + FILE_NAME
  21. return YAMLLoader.get_config(file_path)
  22. @classmethod
  23. def get_settings(cls, file_path=None):
  24. """
  25. Return a Settings object from settings.yml file
  26. :return:
  27. """
  28. settings = cls.get_yaml_config(file_path)
  29. default_stt_name = cls._get_default_speech_to_text(settings)
  30. default_tts_name = cls._get_default_text_to_speech(settings)
  31. default_trigger_name = cls._get_default_trigger(settings)
  32. stts = cls._get_stts(settings)
  33. ttss = cls._get_ttss(settings)
  34. triggers = cls._get_triggers(settings)
  35. random_wake_up_answers = cls._get_random_wake_up_answers(settings)
  36. # create a setting object
  37. setting_object = Settings(default_stt_name=default_stt_name,
  38. default_tts_name=default_tts_name,
  39. default_trigger_name=default_trigger_name,
  40. stts=stts,
  41. ttss=ttss,
  42. triggers=triggers,
  43. random_wake_up_answers=random_wake_up_answers)
  44. return setting_object
  45. @staticmethod
  46. def _get_default_speech_to_text(settings):
  47. try:
  48. default_speech_to_text = settings["default_speech_to_text"]
  49. if default_speech_to_text is None:
  50. raise NullSettingException("Attribute default_speech_to_text is null")
  51. logger.debug("Default STT: %s" % default_speech_to_text)
  52. return default_speech_to_text
  53. except KeyError:
  54. raise SettingNotFound("Attribute default_speech_to_text not found in settings")
  55. @staticmethod
  56. def _get_default_text_to_speech(settings):
  57. try:
  58. default_text_to_speech = settings["default_text_to_speech"]
  59. if default_text_to_speech is None:
  60. raise NullSettingException("Attribute default_text_to_speech is null")
  61. logger.debug("Default TTS: %s" % default_text_to_speech)
  62. return default_text_to_speech
  63. except KeyError:
  64. raise SettingNotFound("Attribute default_text_to_speech not found in settings")
  65. @staticmethod
  66. def _get_default_trigger(settings):
  67. try:
  68. default_trigger = settings["default_trigger"]
  69. if default_trigger is None:
  70. raise NullSettingException("Attribute default_trigger is null")
  71. logger.debug("Default Trigger name: %s" % default_trigger)
  72. return default_trigger
  73. except KeyError:
  74. raise SettingNotFound("Attribute default_trigger not found in settings")
  75. @classmethod
  76. def _get_stts(cls, settings):
  77. """
  78. Return a list of stt object
  79. :param settings: loaded settings file
  80. :return: List of Stt
  81. """
  82. try:
  83. speechs_to_text_list = settings["speech_to_text"]
  84. except KeyError:
  85. raise NullSettingException("speech_to_text settings not found")
  86. stts = list()
  87. for speechs_to_text_el in speechs_to_text_list:
  88. if isinstance(speechs_to_text_el, dict):
  89. # print "Neurons dict ok"
  90. for stt_name in speechs_to_text_el:
  91. name = stt_name
  92. parameters = speechs_to_text_el[name]
  93. new_stt = Stt(name=name, parameters=parameters)
  94. stts.append(new_stt)
  95. else:
  96. # the neuron does not have parameter
  97. new_stt = Stt(name=speechs_to_text_el)
  98. stts.append(new_stt)
  99. return stts
  100. @classmethod
  101. def _get_ttss(cls, settings):
  102. """
  103. Return a list of Tts object
  104. :param settings: loaded settings file
  105. :return: List of Tts
  106. """
  107. try:
  108. text_to_speech_list = settings["text_to_speech"]
  109. except KeyError:
  110. raise SettingNotFound("text_to_speech settings not found")
  111. ttss = list()
  112. for text_to_speech_el in text_to_speech_list:
  113. if isinstance(text_to_speech_el, dict):
  114. # print "Neurons dict ok"
  115. for tts_name in text_to_speech_el:
  116. name = tts_name
  117. parameters = text_to_speech_el[name]
  118. new_tts = Tts(name=name, parameters=parameters)
  119. ttss.append(new_tts)
  120. else:
  121. # the neuron does not have parameter
  122. new_tts = Tts(name=text_to_speech_el)
  123. ttss.append(new_tts)
  124. return ttss
  125. @classmethod
  126. def _get_triggers(cls, settings):
  127. """
  128. Return a list of Trigger object
  129. :param settings: loaded settings file
  130. :return: List of Trigger
  131. """
  132. try:
  133. triggers_list = settings["triggers"]
  134. except KeyError:
  135. raise SettingNotFound("text_to_speech settings not found")
  136. triggers = list()
  137. for trigger_el in triggers_list:
  138. if isinstance(trigger_el, dict):
  139. # print "Neurons dict ok"
  140. for tts_name in trigger_el:
  141. name = tts_name
  142. parameters = trigger_el[name]
  143. new_tts = Trigger(name=name, parameters=parameters)
  144. triggers.append(new_tts)
  145. else:
  146. # the neuron does not have parameter
  147. new_tts = Trigger(name=trigger_el)
  148. triggers.append(new_tts)
  149. return triggers
  150. @classmethod
  151. def _get_random_wake_up_answers(cls, settings):
  152. """
  153. return a list of string
  154. :param settings:
  155. :return:
  156. """
  157. try:
  158. random_wake_up_answers_list = settings["random_wake_up_answers"]
  159. except KeyError:
  160. raise SettingNotFound("text_to_speech settings not found")
  161. # The list cannot be empty
  162. if random_wake_up_answers_list is None:
  163. raise NullSettingException("random_wake_up_answers settings is null")
  164. return random_wake_up_answers_list