Skip to content

Commit f1ae8b9

Browse files
committed
added warning when not ready
1 parent f55128c commit f1ae8b9

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

splitio/client/client.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ def destroyed(self):
6161

6262
def _evaluate_if_ready(self, matching_key, bucketing_key, feature, attributes=None):
6363
if not self.ready:
64+
_LOGGER.warning("The SDK is not ready, results may be incorrect for feature flag %s. Make sure to wait for SDK readiness before using this method", feature)
6465
self._telemetry_init_producer.record_not_ready_usage()
6566
return {
6667
'treatment': CONTROL,
@@ -214,6 +215,7 @@ def _make_evaluations(self, key, feature_flags, attributes, method_name, metric_
214215

215216
def _evaluate_features_if_ready(self, matching_key, bucketing_key, feature_flags, attributes=None):
216217
if not self.ready:
218+
_LOGGER.warning("The SDK is not ready, results may be incorrect for feature flags %s. Make sure to wait for SDK readiness before using this method", ', '.join([feature for feature in feature_flags]))
217219
self._telemetry_init_producer.record_not_ready_usage()
218220
return {
219221
feature_flag: {

tests/client/test_client.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ def test_get_treatment(self, mocker):
8383
assert mocker.call(
8484
[(Impression('some_key', 'some_feature', 'control', Label.NOT_READY, mocker.ANY, mocker.ANY, mocker.ANY), {'some_attribute': 1})]
8585
) in impmanager.process_impressions.mock_calls
86+
assert _logger.call(["The SDK is not ready, results may be incorrect for feature flag %s. Make sure to wait for SDK readiness before using this method", 'some_feature'])
8687

8788
# Test with exception:
8889
ready_property.return_value = True
@@ -159,6 +160,7 @@ def test_get_treatment_with_config(self, mocker):
159160
[(Impression('some_key', 'some_feature', 'control', Label.NOT_READY, mocker.ANY, mocker.ANY, mocker.ANY),
160161
{'some_attribute': 1})]
161162
) in impmanager.process_impressions.mock_calls
163+
assert _logger.call(["The SDK is not ready, results may be incorrect for feature flag %s. Make sure to wait for SDK readiness before using this method", 'some_feature'])
162164

163165
# Test with exception:
164166
ready_property.return_value = True
@@ -236,6 +238,7 @@ def test_get_treatments(self, mocker):
236238
assert mocker.call(
237239
[(Impression('some_key', 'some_feature', 'control', Label.NOT_READY, mocker.ANY, mocker.ANY, mocker.ANY), {'some_attribute': 1})]
238240
) in impmanager.process_impressions.mock_calls
241+
assert _logger.call(["The SDK is not ready, results may be incorrect for feature flags %s. Make sure to wait for SDK readiness before using this method", 'some_feature'])
239242

240243
# Test with exception:
241244
ready_property.return_value = True
@@ -310,6 +313,7 @@ def test_get_treatments_with_config(self, mocker):
310313
assert mocker.call(
311314
[(Impression('some_key', 'some_feature', 'control', Label.NOT_READY, mocker.ANY, mocker.ANY, mocker.ANY), {'some_attribute': 1})]
312315
) in impmanager.process_impressions.mock_calls
316+
assert _logger.call(["The SDK is not ready, results may be incorrect for feature flags %s. Make sure to wait for SDK readiness before using this method", 'some_feature'])
313317

314318
# Test with exception:
315319
ready_property.return_value = True
@@ -400,6 +404,7 @@ def evaluate_features(feature_flag_names, matching_key, bucketing_key, attribute
400404
assert mocker.call(
401405
[(Impression('some_key', 'some_feature', 'control', Label.NOT_READY, mocker.ANY, mocker.ANY, mocker.ANY), {'some_attribute': 1})]
402406
) in impmanager.process_impressions.mock_calls
407+
assert _logger.call(["The SDK is not ready, results may be incorrect for feature flags %s. Make sure to wait for SDK readiness before using this method", 'some_feature'])
403408

404409
# Test with exception:
405410
ready_property.return_value = True
@@ -465,7 +470,6 @@ def evaluate_features(feature_flag_names, matching_key, bucketing_key, attribute
465470
client._evaluator.evaluate_features = evaluate_features
466471
_logger = mocker.Mock()
467472
client._send_impression_to_listener = mocker.Mock()
468-
# pytest.set_trace()
469473
assert client.get_treatments_by_flag_sets('key', ['set1', 'set2']) == {'f1': 'on', 'f2': 'on'}
470474

471475
impressions_called = impmanager.process_impressions.mock_calls[0][1][0]
@@ -488,6 +492,7 @@ def evaluate_features(feature_flag_names, matching_key, bucketing_key, attribute
488492
assert mocker.call(
489493
[(Impression('some_key', 'some_feature', 'control', Label.NOT_READY, mocker.ANY, mocker.ANY, mocker.ANY), {'some_attribute': 1})]
490494
) in impmanager.process_impressions.mock_calls
495+
assert _logger.call(["The SDK is not ready, results may be incorrect for feature flags %s. Make sure to wait for SDK readiness before using this method", 'some_feature'])
491496

492497
# Test with exception:
493498
ready_property.return_value = True
@@ -581,6 +586,7 @@ def evaluate_features(feature_flag_names, matching_key, bucketing_key, attribute
581586
assert mocker.call(
582587
[(Impression('some_key', 'some_feature', 'control', Label.NOT_READY, mocker.ANY, mocker.ANY, mocker.ANY), {'some_attribute': 1})]
583588
) in impmanager.process_impressions.mock_calls
589+
assert _logger.call(["The SDK is not ready, results may be incorrect for feature flags %s. Make sure to wait for SDK readiness before using this method", 'some_feature'])
584590

585591
# Test with exception:
586592
ready_property.return_value = True
@@ -677,6 +683,7 @@ def evaluate_features(feature_flag_names, matching_key, bucketing_key, attribute
677683
assert mocker.call(
678684
[(Impression('some_key', 'some_feature', 'control', Label.NOT_READY, mocker.ANY, mocker.ANY, mocker.ANY), {'some_attribute': 1})]
679685
) in impmanager.process_impressions.mock_calls
686+
assert _logger.call(["The SDK is not ready, results may be incorrect for feature flags %s. Make sure to wait for SDK readiness before using this method", 'some_feature'])
680687

681688
# Test with exception:
682689
ready_property.return_value = True
@@ -748,6 +755,7 @@ def test_track(self, mocker):
748755
telemetry_producer.get_telemetry_init_producer(),
749756
mocker.Mock()
750757
)
758+
_logger = mocker.Mock()
751759

752760
destroyed_mock = mocker.PropertyMock()
753761
destroyed_mock.return_value = False
@@ -762,6 +770,7 @@ def test_track(self, mocker):
762770
size=1024
763771
)
764772
]) in event_storage.put.mock_calls
773+
assert _logger.call("track: the SDK is not ready, results may be incorrect. Make sure to wait for SDK readiness before using this method")
765774

766775
def test_evaluations_before_running_post_fork(self, mocker):
767776
destroyed_property = mocker.PropertyMock()

0 commit comments

Comments
 (0)