Skip to content

Commit 9b1df7b

Browse files
authored
v1.1.0: update bootstrapping (#4)
1 parent 4b0783e commit 9b1df7b

File tree

5 files changed

+21
-18
lines changed

5 files changed

+21
-18
lines changed

fbclient/client.py

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
from fbclient.event_types import FlagEvent, Metric, MetricEvent, UserEvent
1515
from fbclient.interfaces import DataUpdateStatusProvider
1616
from fbclient.status import DataUpdateStatusProviderImpl
17-
from fbclient.status_types import State
1817
from fbclient.streaming import Streaming, _data_to_dict
1918
from fbclient.update_processor import NullUpdateProcessor
2019
from fbclient.utils import (cast_variation_by_flag_type, check_uwsgi, log,
@@ -67,7 +66,10 @@ def __init__(self, config: Config, start_wait: float = 15.):
6766
raise ValueError("Config is not valid")
6867

6968
self._config = config
70-
self._config.validate()
69+
if self._config.is_offline:
70+
log.info("FB Python SDK: SDK is in offline mode")
71+
else:
72+
self._config.validate()
7173

7274
# init components
7375
# event processor
@@ -90,15 +92,11 @@ def __init__(self, config: Config, start_wait: float = 15.):
9092
if not isinstance(self._update_processor, NullUpdateProcessor):
9193
log.info("FB Python SDK: Waiting for Client initialization in %s seconds" % str(start_wait))
9294

93-
if isinstance(self._data_storage, NullDataStorage) or not self._data_storage.initialized:
95+
if isinstance(self._data_storage, NullDataStorage) or (not self._data_storage.initialized and not self._config.is_offline):
9496
log.warning("FB Python SDK: SDK just returns default variation because of no data found in the given environment")
9597

9698
update_processor_ready.wait(start_wait)
97-
if self._config.is_offline:
98-
log.info("FB Python SDK: SDK is in offline mode")
99-
elif self._update_processor.initialized:
100-
log.info("FB Python SDK: SDK initialization is completed")
101-
else:
99+
if not self._update_processor.initialized:
102100
log.warning("FB Python SDK: SDK was not successfully initialized")
103101
else:
104102
log.info("FB Python SDK: SDK starts in asynchronous mode")
@@ -374,13 +372,10 @@ def initialize_from_external_json(self, json_str: str) -> bool:
374372
:param json_str: feature flags, segments...etc in the json format
375373
:return: True if the initialization is well done
376374
"""
377-
if self._config.is_offline and json_str:
375+
if self._config.is_offline:
378376
all_data = json.loads(json_str)
379377
if valide_all_data(all_data):
380378
version, data = _data_to_dict(all_data['data'])
381-
res = self._update_status_provider.init(data, version)
382-
if res:
383-
self._update_status_provider.update_state(State.ok_state())
384-
return res
379+
return self._update_status_provider.init(data, version)
385380

386381
return False

fbclient/update_processor.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
from threading import Event
22
from fbclient.config import Config
33
from fbclient.interfaces import DataUpdateStatusProvider, UpdateProcessor
4+
from fbclient.status_types import State
45

56

67
class NullUpdateProcessor(UpdateProcessor):
78

89
def __init__(self, config: Config, dataUpdateStatusProvider: DataUpdateStatusProvider, ready: Event):
910
self.__ready = ready
11+
self.__store = dataUpdateStatusProvider
1012

1113
def start(self):
1214
self.__ready.set()
15+
self.__store.update_state(State.ok_state())
1316

1417
def stop(self):
1518
pass

fbclient/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
VERSION = "1.1.0"
1+
VERSION = "1.1.1"

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ def parse_requirements(filename):
3939
long_description_content_type='text/markdown',
4040
install_requires=base_reqs,
4141
classifiers=[
42-
'Development Status :: 4 - Beta',
42+
'Development Status :: 5 - Production/Stable',
4343
'Intended Audience :: Developers',
4444
'License :: OSI Approved :: Apache Software License',
4545
'Operating System :: OS Independent',

tests/test_fbclient.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,15 +93,20 @@ def start():
9393
assert not client.initialize
9494

9595

96+
def test_start_and_nowait():
97+
with make_fb_client(NullUpdateProcessor, NullEventProcessor, start_wait=0) as client:
98+
assert client.update_status_provider.wait_for_OKState(timeout=0.1)
99+
assert client.initialize
100+
101+
96102
@patch.object(NullUpdateProcessor, "start")
97-
def test_start_and_nowait(mock_start_method):
103+
def test_start_nowait_and_timeout(mock_start_method):
98104
def start():
99105
pass
100106
mock_start_method.side_effect = start
101107
with make_fb_client(NullUpdateProcessor, NullEventProcessor, start_wait=0) as client:
102-
assert not client.initialize
103-
sleep(0.1)
104108
assert not client.update_status_provider.wait_for_OKState(timeout=0.1)
109+
assert not client.initialize
105110

106111

107112
@patch.object(NullUpdateProcessor, "start")

0 commit comments

Comments
 (0)