Skip to content

Commit 12d616b

Browse files
authored
Merge pull request #551 from splitio/imp-toggle-rename-field
Imp toggle rename field
2 parents 97ed30e + 222f232 commit 12d616b

File tree

10 files changed

+95
-88
lines changed

10 files changed

+95
-88
lines changed

splitio/client/client.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class ClientBase(object): # pylint: disable=too-many-instance-attributes
2323
'label': Label.EXCEPTION,
2424
'change_number': None,
2525
},
26-
'track': True
26+
'impressions_disabled': False
2727
}
2828

2929
_NON_READY_EVAL_RESULT = {
@@ -33,7 +33,7 @@ class ClientBase(object): # pylint: disable=too-many-instance-attributes
3333
'label': Label.NOT_READY,
3434
'change_number': None
3535
},
36-
'track': True
36+
'impressions_disabled': False
3737
}
3838

3939
def __init__(self, factory, recorder, labels_enabled=True):
@@ -126,7 +126,7 @@ def _build_impression(self, key, bucketing, feature, result):
126126
change_number=result['impression']['change_number'],
127127
bucketing_key=bucketing,
128128
time=utctime_ms()),
129-
track=result['track'])
129+
disabled=result['impressions_disabled'])
130130

131131
def _build_impressions(self, key, bucketing, results):
132132
"""Build an impression based on evaluation data & it's result."""

splitio/engine/evaluator.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ def eval_with_context(self, key, bucketing, feature_name, attrs, ctx):
6868
'label': label,
6969
'change_number': _change_number
7070
},
71-
'track': feature.trackImpressions if feature else None
71+
'impressions_disabled': feature.impressionsDisabled if feature else None
7272
}
7373

7474
def _treatment_for_flag(self, flag, key, bucketing, attributes, ctx):

splitio/engine/impressions/impressions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ def process_impressions(self, impressions_decorated):
4343
for_counter_all = []
4444
for_unique_keys_tracker_all = []
4545
for impression_decorated, att in impressions_decorated:
46-
if not impression_decorated.track:
46+
if impression_decorated.disabled:
4747
for_log, for_listener, for_counter, for_unique_keys_tracker = self._none_strategy.process_impressions([(impression_decorated.Impression, att)])
4848
else:
4949
for_log, for_listener, for_counter, for_unique_keys_tracker = self._strategy.process_impressions([(impression_decorated.Impression, att)])

splitio/models/impressions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
'ImpressionDecorated',
2121
[
2222
'Impression',
23-
'track'
23+
'disabled'
2424
]
2525
)
2626

splitio/models/splits.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
SplitView = namedtuple(
1212
'SplitView',
13-
['name', 'traffic_type', 'killed', 'treatments', 'change_number', 'configs', 'default_treatment', 'sets', 'trackImpressions']
13+
['name', 'traffic_type', 'killed', 'treatments', 'change_number', 'configs', 'default_treatment', 'sets', 'impressions_disabled']
1414
)
1515

1616
_DEFAULT_CONDITIONS_TEMPLATE = {
@@ -74,7 +74,7 @@ def __init__( # pylint: disable=too-many-arguments
7474
traffic_allocation_seed=None,
7575
configurations=None,
7676
sets=None,
77-
trackImpressions=None
77+
impressionsDisabled=None
7878
):
7979
"""
8080
Class constructor.
@@ -97,8 +97,8 @@ def __init__( # pylint: disable=too-many-arguments
9797
:type traffic_allocation_seed: int
9898
:pram sets: list of flag sets
9999
:type sets: list
100-
:pram trackImpressions: track impressions flag
101-
:type trackImpressions: boolean
100+
:pram impressionsDisabled: track impressions flag
101+
:type impressionsDisabled: boolean
102102
"""
103103
self._name = name
104104
self._seed = seed
@@ -128,7 +128,7 @@ def __init__( # pylint: disable=too-many-arguments
128128

129129
self._configurations = configurations
130130
self._sets = set(sets) if sets is not None else set()
131-
self._trackImpressions = trackImpressions if trackImpressions is not None else True
131+
self._impressionsDisabled = impressionsDisabled if impressionsDisabled is not None else False
132132

133133
@property
134134
def name(self):
@@ -191,9 +191,9 @@ def sets(self):
191191
return self._sets
192192

193193
@property
194-
def trackImpressions(self):
195-
"""Return trackImpressions of the split."""
196-
return self._trackImpressions
194+
def impressionsDisabled(self):
195+
"""Return impressionsDisabled of the split."""
196+
return self._impressionsDisabled
197197

198198
def get_configurations_for(self, treatment):
199199
"""Return the mapping of treatments to configurations."""
@@ -224,7 +224,7 @@ def to_json(self):
224224
'conditions': [c.to_json() for c in self.conditions],
225225
'configurations': self._configurations,
226226
'sets': list(self._sets),
227-
'trackImpressions': self._trackImpressions
227+
'impressionsDisabled': self._impressionsDisabled
228228
}
229229

230230
def to_split_view(self):
@@ -243,7 +243,7 @@ def to_split_view(self):
243243
self._configurations if self._configurations is not None else {},
244244
self._default_treatment,
245245
list(self._sets) if self._sets is not None else [],
246-
self._trackImpressions
246+
self._impressionsDisabled
247247
)
248248

249249
def local_kill(self, default_treatment, change_number):
@@ -300,5 +300,5 @@ def from_raw(raw_split):
300300
traffic_allocation_seed=raw_split.get('trafficAllocationSeed'),
301301
configurations=raw_split.get('configurations'),
302302
sets=set(raw_split.get('sets')) if raw_split.get('sets') is not None else [],
303-
trackImpressions=raw_split.get('trackImpressions') if raw_split.get('trackImpressions') is not None else True
303+
impressionsDisabled=raw_split.get('impressionsDisabled') if raw_split.get('impressionsDisabled') is not None else False
304304
)

tests/client/test_client.py

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
InMemoryImpressionStorageAsync, InMemorySegmentStorageAsync, InMemoryTelemetryStorageAsync, InMemoryEventStorageAsync
1818
from splitio.models.splits import Split, Status, from_raw
1919
from splitio.engine.impressions.impressions import Manager as ImpressionManager
20+
from splitio.engine.impressions.manager import Counter as ImpressionsCounter
21+
from splitio.engine.impressions.unique_keys_tracker import UniqueKeysTracker, UniqueKeysTrackerAsync
2022
from splitio.engine.telemetry import TelemetryStorageConsumer, TelemetryStorageProducer, TelemetryStorageProducerAsync
2123
from splitio.engine.evaluator import Evaluator
2224
from splitio.recorder.recorder import StandardRecorder, StandardRecorderAsync
@@ -44,7 +46,9 @@ def test_get_treatment(self, mocker):
4446
mocker.patch('splitio.client.client.get_latency_bucket_index', new=lambda x: 5)
4547

4648
impmanager = ImpressionManager(StrategyDebugMode(), StrategyNoneMode(), telemetry_runtime_producer)
47-
recorder = StandardRecorder(impmanager, event_storage, impression_storage, telemetry_producer.get_telemetry_evaluation_producer(), telemetry_producer.get_telemetry_runtime_producer())
49+
recorder = StandardRecorder(impmanager, event_storage, impression_storage, telemetry_producer.get_telemetry_evaluation_producer(), telemetry_producer.get_telemetry_runtime_producer(),
50+
unique_keys_tracker=UniqueKeysTracker(),
51+
imp_counter=ImpressionsCounter())
4852
class TelemetrySubmitterMock():
4953
def synchronize_config(*_):
5054
pass
@@ -61,7 +65,9 @@ def synchronize_config(*_):
6165
telemetry_producer.get_telemetry_init_producer(),
6266
TelemetrySubmitterMock(),
6367
)
64-
68+
ready_property = mocker.PropertyMock()
69+
ready_property.return_value = True
70+
type(factory).ready = ready_property
6571
factory.block_until_ready(5)
6672

6773
split_storage.update([from_raw(splits_json['splitChange1_1']['splits'][0])], [], -1)
@@ -74,7 +80,7 @@ def synchronize_config(*_):
7480
'label': 'some_label',
7581
'change_number': 123
7682
},
77-
'track': True
83+
'impressions_disabled': False
7884
}
7985
_logger = mocker.Mock()
8086
assert client.get_treatment('some_key', 'SPLIT_2') == 'on'
@@ -85,6 +91,7 @@ def synchronize_config(*_):
8591
ready_property = mocker.PropertyMock()
8692
ready_property.return_value = False
8793
type(factory).ready = ready_property
94+
# pytest.set_trace()
8895
assert client.get_treatment('some_key', 'SPLIT_2', {'some_attribute': 1}) == 'control'
8996
assert impression_storage.pop_many(100) == [Impression('some_key', 'SPLIT_2', 'control', Label.NOT_READY, None, None, 1000)]
9097

@@ -143,7 +150,7 @@ def synchronize_config(*_):
143150
'label': 'some_label',
144151
'change_number': 123
145152
},
146-
'track': True
153+
'impressions_disabled': False
147154
}
148155
_logger = mocker.Mock()
149156
client._send_impression_to_listener = mocker.Mock()
@@ -218,7 +225,7 @@ def synchronize_config(*_):
218225
'label': 'some_label',
219226
'change_number': 123
220227
},
221-
'track': True
228+
'impressions_disabled': False
222229
}
223230
client._evaluator.eval_many_with_context.return_value = {
224231
'SPLIT_2': evaluation,
@@ -296,7 +303,7 @@ def synchronize_config(*_):
296303
'label': 'some_label',
297304
'change_number': 123
298305
},
299-
'track': True
306+
'impressions_disabled': False
300307
}
301308
client._evaluator.eval_many_with_context.return_value = {
302309
'SPLIT_2': evaluation,
@@ -373,7 +380,7 @@ def synchronize_config(*_):
373380
'label': 'some_label',
374381
'change_number': 123
375382
},
376-
'track': True
383+
'impressions_disabled': False
377384
}
378385
client._evaluator.eval_many_with_context.return_value = {
379386
'SPLIT_2': evaluation,
@@ -449,7 +456,7 @@ def synchronize_config(*_):
449456
'label': 'some_label',
450457
'change_number': 123
451458
},
452-
'track': True
459+
'impressions_disabled': False
453460
}
454461
client._evaluator.eval_many_with_context.return_value = {
455462
'SPLIT_1': evaluation,
@@ -530,7 +537,7 @@ def synchronize_config(*_):
530537
'label': 'some_label',
531538
'change_number': 123
532539
},
533-
'track': True
540+
'impressions_disabled': False
534541
}
535542
client._evaluator.eval_many_with_context.return_value = {
536543
'SPLIT_1': evaluation,
@@ -608,7 +615,7 @@ def synchronize_config(*_):
608615
'label': 'some_label',
609616
'change_number': 123
610617
},
611-
'track': True
618+
'impressions_disabled': False
612619
}
613620
client._evaluator.eval_many_with_context.return_value = {
614621
'SPLIT_1': evaluation,
@@ -1270,7 +1277,7 @@ async def synchronize_config(*_):
12701277
'label': 'some_label',
12711278
'change_number': 123
12721279
},
1273-
'track': True
1280+
'impressions_disabled': False
12741281
}
12751282
_logger = mocker.Mock()
12761283
assert await client.get_treatment('some_key', 'SPLIT_2') == 'on'
@@ -1340,7 +1347,7 @@ async def synchronize_config(*_):
13401347
'label': 'some_label',
13411348
'change_number': 123
13421349
},
1343-
'track': True
1350+
'impressions_disabled': False
13441351
}
13451352
_logger = mocker.Mock()
13461353
client._send_impression_to_listener = mocker.Mock()
@@ -1415,7 +1422,7 @@ async def synchronize_config(*_):
14151422
'label': 'some_label',
14161423
'change_number': 123
14171424
},
1418-
'track': True
1425+
'impressions_disabled': False
14191426
}
14201427
client._evaluator.eval_many_with_context.return_value = {
14211428
'SPLIT_2': evaluation,
@@ -1493,7 +1500,7 @@ async def synchronize_config(*_):
14931500
'label': 'some_label',
14941501
'change_number': 123
14951502
},
1496-
'track': True
1503+
'impressions_disabled': False
14971504
}
14981505
client._evaluator.eval_many_with_context.return_value = {
14991506
'SPLIT_2': evaluation,
@@ -1571,7 +1578,7 @@ async def synchronize_config(*_):
15711578
'label': 'some_label',
15721579
'change_number': 123
15731580
},
1574-
'track': True
1581+
'impressions_disabled': False
15751582
}
15761583
client._evaluator.eval_many_with_context.return_value = {
15771584
'SPLIT_2': evaluation,
@@ -1648,7 +1655,7 @@ async def synchronize_config(*_):
16481655
'label': 'some_label',
16491656
'change_number': 123
16501657
},
1651-
'track': True
1658+
'impressions_disabled': False
16521659
}
16531660
client._evaluator.eval_many_with_context.return_value = {
16541661
'SPLIT_1': evaluation,
@@ -1730,7 +1737,7 @@ async def synchronize_config(*_):
17301737
'label': 'some_label',
17311738
'change_number': 123
17321739
},
1733-
'track': True
1740+
'impressions_disabled': False
17341741
}
17351742
client._evaluator.eval_many_with_context.return_value = {
17361743
'SPLIT_1': evaluation,
@@ -1812,7 +1819,7 @@ async def synchronize_config(*_):
18121819
'label': 'some_label',
18131820
'change_number': 123
18141821
},
1815-
'track': True
1822+
'impressions_disabled': False
18161823
}
18171824
client._evaluator.eval_many_with_context.return_value = {
18181825
'SPLIT_1': evaluation,

tests/engine/test_evaluator.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ def test_evaluate_treatment_ok(self, mocker):
5252
assert result['impression']['change_number'] == 123
5353
assert result['impression']['label'] == 'some_label'
5454
assert mocked_split.get_configurations_for.mock_calls == [mocker.call('on')]
55-
assert result['track'] == mocked_split.trackImpressions
55+
assert result['impressions_disabled'] == mocked_split.impressionsDisabled
5656

5757

5858
def test_evaluate_treatment_ok_no_config(self, mocker):

0 commit comments

Comments
 (0)