settings.py 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. import logging
  2. from kalliope import SignalLauncher
  3. from kalliope.core import NeuronModule
  4. from kalliope.core.ConfigurationManager import SettingEditor
  5. from kalliope.core.Models.settings.Tts import Tts
  6. logging.basicConfig()
  7. logger = logging.getLogger("kalliope")
  8. class Settings(NeuronModule):
  9. """
  10. """
  11. def __init__(self, **kwargs):
  12. super(Settings, self).__init__(**kwargs)
  13. self.default_tts_name = kwargs.get("default_tts_name", None)
  14. self.tts = kwargs.get("tts", None)
  15. self.default_stt_name = kwargs.get("default_stt_name", None)
  16. self.default_trigger_name = kwargs.get("default_trigger_name", None)
  17. self.default_player_name = kwargs.get("default_player_name", None)
  18. self.deaf = kwargs.get("deaf", None)
  19. self.mute = kwargs.get("mute", None)
  20. self.energy_threshold = kwargs.get("energy_threshold", None)
  21. self.adjust_for_ambient_noise_second = kwargs.get("adjust_for_ambient_noise_second", None)
  22. if self._is_parameters_ok():
  23. self._set_settings()
  24. def _is_parameters_ok(self):
  25. """
  26. Check the validity for each parameter
  27. :return: True if all parameters are set correctly, False otherwise.
  28. """
  29. # Players
  30. if self.default_player_name:
  31. if not self._check_name_in_list_settings_entry(self.default_player_name, self.settings.players):
  32. logger.debug("[Settings] default_player_name %s is not defined in settings file ",
  33. self.default_player_name)
  34. return False
  35. # STT
  36. if self.default_stt_name:
  37. if not self._check_name_in_list_settings_entry(self.default_stt_name, self.settings.stts):
  38. logger.debug("[Settings] default_stt_name %s is not defined in settings file ", self.default_stt_name)
  39. return False
  40. # TRIGGER
  41. if self.default_trigger_name:
  42. if self._check_name_in_list_settings_entry(self.default_trigger_name, self.settings.triggers):
  43. logger.debug("[Settings] default_trigger_name %s is not defined in settings file ",
  44. self.default_trigger_name)
  45. return False
  46. # TTS
  47. if self.default_tts_name:
  48. if not self._check_name_in_list_settings_entry(self.default_tts_name, self.settings.ttss):
  49. logger.debug("[Settings] default_tts_name %s is not defined in settings file ", self.default_tts_name)
  50. return False
  51. # TODO remove TTS management from the NeuronModule class
  52. if self.tts:
  53. if not isinstance(self.tts, list):
  54. logger.debug("[Settings] tts current type: %s. tts should be a list", type(self.tts))
  55. return False
  56. for tts_el in self.tts:
  57. if not isinstance(tts_el, dict):
  58. logger.debug("[Settings] tts element current type: %s. tts element should be a dict", type(tts_el))
  59. return False
  60. # Options
  61. if self.deaf is not None:
  62. if not isinstance(self.deaf, bool):
  63. logger.debug("[Settings] deaf %s is not a correct value, you must define True or False", self.deaf)
  64. return False
  65. if self.mute is not None:
  66. if not isinstance(self.mute, bool):
  67. logger.debug("[Settings] mute %s is not a correct value, you must define True or False", self.mute)
  68. return False
  69. if self.energy_threshold is not None:
  70. if not isinstance(self.energy_threshold, int):
  71. logger.debug("[Settings] energy_threshold %s is not a correct integer, you must define a number",
  72. self.energy_threshold)
  73. return False
  74. if self.adjust_for_ambient_noise_second is not None:
  75. if not isinstance(self.adjust_for_ambient_noise_second, int):
  76. logger.debug(
  77. "[Settings] adjust_for_ambient_noise_second %s is not a correct integer, you must define a number",
  78. self.adjust_for_ambient_noise_second)
  79. return False
  80. # TODO HOOKS
  81. # TODO Resources
  82. # TODO REST API
  83. # TODO Variables
  84. return True
  85. def _set_settings(self):
  86. if self.default_player_name:
  87. SettingEditor.set_default_player_name(self.default_player_name)
  88. if self.default_stt_name:
  89. SettingEditor.set_default_stt_name(self.default_stt_name)
  90. if self.default_trigger_name:
  91. SettingEditor.set_default_trigger_name(self.default_trigger_name)
  92. if self.default_tts_name:
  93. SettingEditor.set_default_tts_name(self.default_tts_name)
  94. if self.tts:
  95. for tts_el in self.tts:
  96. if isinstance(tts_el, dict):
  97. for tts_name in tts_el:
  98. name = tts_name
  99. parameters = tts_el[name]
  100. new_tts = Tts(name=name, parameters=parameters)
  101. SettingEditor.set_ttss(new_tts)
  102. # Options
  103. if self.deaf is not None:
  104. signal_order = SignalLauncher.get_order_instance()
  105. if signal_order is not None:
  106. SettingEditor.set_deaf_status(signal_order.trigger_instance, self.status)
  107. if self.mute is not None:
  108. SettingEditor.set_mute_status(self.mute)
  109. if self.energy_threshold is not None:
  110. SettingEditor.set_energy_threshold(self.energy_threshold)
  111. if self.adjust_for_ambient_noise_second is not None:
  112. SettingEditor.set_adjust_for_ambient_noise_second(self.adjust_for_ambient_noise_second)
  113. @staticmethod
  114. def _check_name_in_list_settings_entry(name_to_check, list_settings_entry):
  115. """
  116. manage object models : STT, TRIGGERS, TTS, PLAYERS because they have "name" attributes
  117. TODO
  118. :param name_to_check:
  119. :param list_settings_entry:
  120. :return:
  121. """
  122. found = False
  123. for settings_entry in list_settings_entry:
  124. if settings_entry.name == name_to_check:
  125. found = True
  126. return found