diff --git a/main.py b/main.py index 11bad01..95b4468 100644 --- a/main.py +++ b/main.py @@ -6,7 +6,7 @@ json_source = JsonFileSource(file_path='test_data/dict_and_array.json') yaml_source = YamlFileSource(file_path='test_data/dict_and_array.yml') -mongo = MongoClient(port=27018, connect=False) +mongo = MongoClient(port=27018, connect=False, serverSelectionTimeoutMS=5000) collection = mongo.pyboss.similarity b = Boss([ diff --git a/pyboss/boss.py b/pyboss/boss.py index 5873eaa..80bb230 100644 --- a/pyboss/boss.py +++ b/pyboss/boss.py @@ -1,6 +1,7 @@ import threading import time from typing import List, Optional +import traceback from pyboss.source.base import BaseSource from pyboss.value import DictValue @@ -10,8 +11,9 @@ class Boss: def __init__(self, sources: List[BaseSource], refresh_interval: int = 0): self._sources = sources self._tree: Optional[DictValue] = None - self.refresh_interval = refresh_interval + self.refresh_interval = refresh_interval if refresh_interval > 60 else 60 + self._start_config_refresher() self._load_config() def __getattr__(self, item): @@ -21,14 +23,6 @@ def __getitem__(self, item): return self._tree[item] def _load_config(self): - if self.refresh_interval > 0: - def fn(): - interval = self.refresh_interval if self.refresh_interval > 60 else 60 - time.sleep(interval) - self._load_config() - - threading.Thread(target=fn, daemon=True).start() - loaded_value = {} for src in self._sources: @@ -36,3 +30,15 @@ def fn(): loaded_value = src.merger.merge(loaded_value, src_value) self._tree = DictValue(loaded_value) + + def _start_config_refresher(self): + if self.refresh_interval > 0: + def fn(): + while True: + time.sleep(self.refresh_interval) + try: + self._load_config() + except Exception as e: + traceback.print_exc() + + threading.Thread(target=fn, daemon=True).start()