SettingLoader.py 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  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("kalliope")
  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. random_wake_up_sounds = cls._get_random_wake_up_sounds(settings)
  37. # create a setting object
  38. setting_object = Settings(default_stt_name=default_stt_name,
  39. default_tts_name=default_tts_name,
  40. default_trigger_name=default_trigger_name,
  41. stts=stts,
  42. ttss=ttss,
  43. triggers=triggers,
  44. random_wake_up_answers=random_wake_up_answers,
  45. random_wake_up_sounds=random_wake_up_sounds)
  46. return setting_object
  47. @staticmethod
  48. def _get_default_speech_to_text(settings):
  49. try:
  50. default_speech_to_text = settings["default_speech_to_text"]
  51. if default_speech_to_text is None:
  52. raise NullSettingException("Attribute default_speech_to_text is null")
  53. logger.debug("Default STT: %s" % default_speech_to_text)
  54. return default_speech_to_text
  55. except KeyError:
  56. raise SettingNotFound("Attribute default_speech_to_text not found in settings")
  57. @staticmethod
  58. def _get_default_text_to_speech(settings):
  59. try:
  60. default_text_to_speech = settings["default_text_to_speech"]
  61. if default_text_to_speech is None:
  62. raise NullSettingException("Attribute default_text_to_speech is null")
  63. logger.debug("Default TTS: %s" % default_text_to_speech)
  64. return default_text_to_speech
  65. except KeyError:
  66. raise SettingNotFound("Attribute default_text_to_speech not found in settings")
  67. @staticmethod
  68. def _get_default_trigger(settings):
  69. try:
  70. default_trigger = settings["default_trigger"]
  71. if default_trigger is None:
  72. raise NullSettingException("Attribute default_trigger is null")
  73. logger.debug("Default Trigger name: %s" % default_trigger)
  74. return default_trigger
  75. except KeyError:
  76. raise SettingNotFound("Attribute default_trigger not found in settings")
  77. @classmethod
  78. def _get_stts(cls, settings):
  79. """
  80. Return a list of stt object
  81. :param settings: loaded settings file
  82. :return: List of Stt
  83. """
  84. try:
  85. speechs_to_text_list = settings["speech_to_text"]
  86. except KeyError:
  87. raise NullSettingException("speech_to_text settings not found")
  88. stts = list()
  89. for speechs_to_text_el in speechs_to_text_list:
  90. if isinstance(speechs_to_text_el, dict):
  91. # print "Neurons dict ok"
  92. for stt_name in speechs_to_text_el:
  93. name = stt_name
  94. parameters = speechs_to_text_el[name]
  95. new_stt = Stt(name=name, parameters=parameters)
  96. stts.append(new_stt)
  97. else:
  98. # the neuron does not have parameter
  99. new_stt = Stt(name=speechs_to_text_el)
  100. stts.append(new_stt)
  101. return stts
  102. @classmethod
  103. def _get_ttss(cls, settings):
  104. """
  105. Return a list of Tts object
  106. :param settings: loaded settings file
  107. :return: List of Tts
  108. """
  109. try:
  110. text_to_speech_list = settings["text_to_speech"]
  111. except KeyError:
  112. raise SettingNotFound("text_to_speech settings not found")
  113. ttss = list()
  114. for text_to_speech_el in text_to_speech_list:
  115. if isinstance(text_to_speech_el, dict):
  116. # print "Neurons dict ok"
  117. for tts_name in text_to_speech_el:
  118. name = tts_name
  119. parameters = text_to_speech_el[name]
  120. new_tts = Tts(name=name, parameters=parameters)
  121. ttss.append(new_tts)
  122. else:
  123. # the neuron does not have parameter
  124. new_tts = Tts(name=text_to_speech_el)
  125. ttss.append(new_tts)
  126. return ttss
  127. @classmethod
  128. def _get_triggers(cls, settings):
  129. """
  130. Return a list of Trigger object
  131. :param settings: loaded settings file
  132. :return: List of Trigger
  133. """
  134. try:
  135. triggers_list = settings["triggers"]
  136. except KeyError:
  137. raise SettingNotFound("text_to_speech settings not found")
  138. triggers = list()
  139. for trigger_el in triggers_list:
  140. if isinstance(trigger_el, dict):
  141. # print "Neurons dict ok"
  142. for tts_name in trigger_el:
  143. name = tts_name
  144. parameters = trigger_el[name]
  145. new_tts = Trigger(name=name, parameters=parameters)
  146. triggers.append(new_tts)
  147. else:
  148. # the neuron does not have parameter
  149. new_tts = Trigger(name=trigger_el)
  150. triggers.append(new_tts)
  151. return triggers
  152. @classmethod
  153. def _get_random_wake_up_answers(cls, settings):
  154. """
  155. return a list of string
  156. :param settings:
  157. :return:
  158. """
  159. try:
  160. random_wake_up_answers_list = settings["random_wake_up_answers"]
  161. except KeyError:
  162. # User does not provide this settings
  163. return None
  164. # The list cannot be empty
  165. if random_wake_up_answers_list is None:
  166. raise NullSettingException("random_wake_up_answers settings is null")
  167. return random_wake_up_answers_list
  168. @classmethod
  169. def _get_random_wake_up_sounds(cls, settings):
  170. """
  171. return a list of string
  172. :param settings:
  173. :return: List of string
  174. """
  175. try:
  176. random_wake_up_sounds_list = settings["random_wake_up_sounds"]
  177. except KeyError:
  178. # User does not provide this settings
  179. return None
  180. # The the setting is present, the list cannot be empty
  181. if random_wake_up_sounds_list is None:
  182. raise NullSettingException("random_wake_up_sounds settings is empty")
  183. return random_wake_up_sounds_list