SettingLoader.py 6.5 KB

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