Browse Source

[Feature] Singleton Settings

monf 8 years ago
parent
commit
a8b4c6fe1d
3 changed files with 60 additions and 29 deletions
  1. 35 26
      core/ConfigurationManager/SettingLoader.py
  2. 15 3
      core/Models/Settings.py
  3. 10 0
      test.py

+ 35 - 26
core/ConfigurationManager/SettingLoader.py

@@ -26,47 +26,56 @@ class NullSettingException(Exception):
 class SettingNotFound(Exception):
     pass
 
-@Singleton
+
 class SettingLoader(object):
 
     def __init__(self):
         pass
 
     @classmethod
-    def _get_yaml_config(cls, file_path=None):
+    def get_yaml_config(cls, file_path=None):
         if file_path is None:
             file_path = FILE_NAME
         return YAMLLoader.get_config(file_path)
 
     @classmethod
-    def _get_settings(cls, file_path=None):
+    def get_settings(cls, file_path=None):
         """
         Return a Settings object from settings.yml file
         :return:
         """
-        settings = cls.get_yaml_config(file_path)
-        default_stt_name = cls._get_default_speech_to_text(settings)
-        default_tts_name = cls._get_default_text_to_speech(settings)
-        default_trigger_name = cls._get_default_trigger(settings)
-        stts = cls._get_stts(settings)
-        ttss = cls._get_ttss(settings)
-        triggers = cls._get_triggers(settings)
-        random_wake_up_answers = cls._get_random_wake_up_answers(settings)
-        random_wake_up_sounds = cls._get_random_wake_up_sounds(settings)
-        rest_api = cls._get_rest_api(settings)
-        cache_path = cls._get_cache_path(settings)
-
-        # create a setting object
-        setting_object = Settings(default_stt_name=default_stt_name,
-                                  default_tts_name=default_tts_name,
-                                  default_trigger_name=default_trigger_name,
-                                  stts=stts,
-                                  ttss=ttss,
-                                  triggers=triggers,
-                                  random_wake_up_answers=random_wake_up_answers,
-                                  random_wake_up_sounds=random_wake_up_sounds,
-                                  rest_api=rest_api,
-                                  cache_path=cache_path)
+
+        # create a new setting
+        setting_object = Settings.Instance()
+        logger.debug("Is Settings already loaded ? %r" % setting_object.is_loaded)
+        if setting_object.is_loaded is False:
+
+            # Get the setting parameters
+            settings = cls.get_yaml_config(file_path)
+            default_stt_name = cls._get_default_speech_to_text(settings)
+            default_tts_name = cls._get_default_text_to_speech(settings)
+            default_trigger_name = cls._get_default_trigger(settings)
+            stts = cls._get_stts(settings)
+            ttss = cls._get_ttss(settings)
+            triggers = cls._get_triggers(settings)
+            random_wake_up_answers = cls._get_random_wake_up_answers(settings)
+            random_wake_up_sounds = cls._get_random_wake_up_sounds(settings)
+            rest_api = cls._get_rest_api(settings)
+            cache_path = cls._get_cache_path(settings)
+
+            # Load the setting singleton with the parameters
+            setting_object.default_tts_name=default_tts_name
+            setting_object.default_stt_name=default_stt_name
+            setting_object.default_trigger_name=default_trigger_name
+            setting_object.stts=stts
+            setting_object.ttss=ttss
+            setting_object.triggers=triggers
+            setting_object.random_wake_up_answers=random_wake_up_answers
+            setting_object.random_wake_up_sounds=random_wake_up_sounds
+            setting_object.rest_api=rest_api
+            setting_object.cache_path=cache_path
+            setting_object.is_loaded = True
+
         return setting_object
 
     @staticmethod

+ 15 - 3
core/Models/Settings.py

@@ -1,9 +1,20 @@
+from core.Models import Singleton
 
 
+@Singleton
 class Settings(object):
-    def __init__(self, default_tts_name=None, default_stt_name=None,
-                 default_trigger_name=None, ttss=None, stts=None,
-                 random_wake_up_answers=None, random_wake_up_sounds=None, triggers=None, rest_api=None, cache_path=None):
+    def __init__(self,
+                 default_tts_name=None,
+                 default_stt_name=None,
+                 default_trigger_name=None,
+                 ttss=None,
+                 stts=None,
+                 random_wake_up_answers=None,
+                 random_wake_up_sounds=None,
+                 triggers=None,
+                 rest_api=None,
+                 cache_path=None):
+
         self.default_tts_name = default_tts_name
         self.default_stt_name = default_stt_name
         self.default_trigger_name = default_trigger_name
@@ -14,3 +25,4 @@ class Settings(object):
         self.triggers = triggers
         self.rest_api = rest_api
         self.cache_path = cache_path
+        self.is_loaded = False

+ 10 - 0
test.py

@@ -2,6 +2,7 @@
 import logging
 
 from core.ConfigurationManager.BrainLoader import BrainLoader
+from core.ConfigurationManager.SettingLoader import SettingLoader
 
 logging.basicConfig()
 logger = logging.getLogger("kalliope")
@@ -20,4 +21,13 @@ print brain is brain3
 print brain is brain4
 print brain4 is brain2
 
+set = SettingLoader.get_settings()
+set2 = SettingLoader.get_settings()
+set3 = SettingLoader.get_settings()
+set4 = SettingLoader.get_settings()
+
+print set is set2
+print set is set3
+print set is set4
+print set3 is set2