diff --git a/configcatclient/configservice.py b/configcatclient/configservice.py index 2359fa4..7ae2d12 100644 --- a/configcatclient/configservice.py +++ b/configcatclient/configservice.py @@ -1,5 +1,5 @@ import hashlib -from threading import Thread, Event, Lock +from threading import Thread, Event, RLock from . import utils from .config import FEATURE_FLAGS, CONFIG_FILE_NAME, SERIALIZATION_FORMAT_VERSION @@ -21,7 +21,7 @@ def __init__(self, sdk_key, polling_mode, hooks, config_fetcher, log, config_cac self._is_offline = is_offline self._response_future = None self._initialized = Event() - self._lock = Lock() + self._lock = RLock() self._ongoing_fetch = False self._fetch_finished = Event() self._start_time = utils.get_utc_now() diff --git a/configcatclienttests/test_hooks.py b/configcatclienttests/test_hooks.py index e9f7c26..3db2918 100644 --- a/configcatclienttests/test_hooks.py +++ b/configcatclienttests/test_hooks.py @@ -137,6 +137,16 @@ def test_callback_exception(self): value = client.get_value('', 'default') self.assertEqual('default', value) + def test_callback_config_changed(self): + def on_flag_changed(config): + value = client.get_value('testStringKey', '') + self.assertEqual(TEST_OBJECT[FEATURE_FLAGS]['testStringKey'], value) + + hooks = Hooks(on_config_changed=on_flag_changed) + config_cache = ConfigCacheMock() + client = ConfigCatClient.get(TEST_SDK_KEY, ConfigCatOptions(polling_mode=PollingMode.manual_poll(), config_cache=config_cache, hooks=hooks)) + client.force_refresh() + if __name__ == '__main__': unittest.main()