4949def _validate_last_impressions (client , * to_validate ):
5050 """Validate the last N impressions are present disregarding the order."""
5151 imp_storage = client ._factory ._get_storage ('impressions' )
52+ as_tup_set = set ()
5253 if isinstance (client ._factory ._get_storage ('splits' ), RedisSplitStorage ) or isinstance (client ._factory ._get_storage ('splits' ), PluggableSplitStorage ):
5354 if isinstance (client ._factory ._get_storage ('splits' ), RedisSplitStorage ):
5455 redis_client = imp_storage ._redis
@@ -64,15 +65,28 @@ def _validate_last_impressions(client, *to_validate):
6465 json .loads (i )
6566 for i in results
6667 ]
67- as_tup_set = set (
68- (i ['i' ]['f' ], i ['i' ]['k' ], i ['i' ]['t' ])
69- for i in impressions_raw
70- )
68+ if to_validate != ():
69+ if len (to_validate [0 ]) == 3 :
70+ as_tup_set = set (
71+ (i ['i' ]['f' ], i ['i' ]['k' ], i ['i' ]['t' ])
72+ for i in impressions_raw
73+ )
74+ else :
75+ as_tup_set = set (
76+ (i ['i' ]['f' ], i ['i' ]['k' ], i ['i' ]['t' ], i ['i' ]['properties' ])
77+ for i in impressions_raw
78+ )
79+
7180 assert as_tup_set == set (to_validate )
7281 time .sleep (0.2 ) # delay for redis to sync
7382 else :
7483 impressions = imp_storage .pop_many (len (to_validate ))
75- as_tup_set = set ((i .feature_name , i .matching_key , i .treatment ) for i in impressions )
84+ if to_validate != ():
85+ if len (to_validate [0 ]) == 3 :
86+ as_tup_set = set ((i .feature_name , i .matching_key , i .treatment ) for i in impressions )
87+ else :
88+ as_tup_set = set ((i .feature_name , i .matching_key , i .treatment , i .properties ) for i in impressions )
89+
7690 assert as_tup_set == set (to_validate )
7791
7892def _validate_last_events (client , * to_validate ):
@@ -108,9 +122,9 @@ def _get_treatment(factory, skip_rbs=False):
108122 except :
109123 pass
110124
111- assert client .get_treatment ('user1' , 'sample_feature' ) == 'on'
125+ assert client .get_treatment ('user1' , 'sample_feature' , impressions_properties = { 'prop' : 'value' } ) == 'on'
112126 if not isinstance (factory ._recorder ._impressions_manager ._strategy , StrategyNoneMode ):
113- _validate_last_impressions (client , ('sample_feature' , 'user1' , 'on' ))
127+ _validate_last_impressions (client , ('sample_feature' , 'user1' , 'on' , '{"prop": "value"}' ))
114128
115129 assert client .get_treatment ('invalidKey' , 'sample_feature' ) == 'off'
116130 if not isinstance (factory ._recorder ._impressions_manager ._strategy , StrategyNoneMode ):
@@ -514,7 +528,7 @@ def setup_method(self):
514528 'events' : InMemoryEventStorage (5000 , telemetry_runtime_producer ),
515529 }
516530 impmanager = ImpressionsManager (StrategyDebugMode (), StrategyNoneMode (), telemetry_runtime_producer ) # no listener
517- recorder = StandardRecorder (impmanager , storages ['events' ], storages ['impressions' ], telemetry_evaluation_producer , telemetry_runtime_producer )
531+ recorder = StandardRecorder (impmanager , storages ['events' ], storages ['impressions' ], telemetry_evaluation_producer , telemetry_runtime_producer , imp_counter = ImpressionsCounter () )
518532 # Since we are passing None as SDK_Ready event, the factory will use the Redis telemetry call, using try catch to ignore the exception.
519533 try :
520534 self .factory = SplitFactory ('some_api_key' ,
@@ -674,7 +688,7 @@ def setup_method(self):
674688 'events' : InMemoryEventStorage (5000 , telemetry_runtime_producer ),
675689 }
676690 impmanager = ImpressionsManager (StrategyOptimizedMode (), StrategyNoneMode (), telemetry_runtime_producer ) # no listener
677- recorder = StandardRecorder (impmanager , storages ['events' ], storages ['impressions' ], telemetry_evaluation_producer , telemetry_runtime_producer )
691+ recorder = StandardRecorder (impmanager , storages ['events' ], storages ['impressions' ], telemetry_evaluation_producer , telemetry_runtime_producer , imp_counter = ImpressionsCounter () )
678692 self .factory = SplitFactory ('some_api_key' ,
679693 storages ,
680694 True ,
@@ -967,7 +981,7 @@ def setup_method(self):
967981 }
968982 impmanager = ImpressionsManager (StrategyDebugMode (), StrategyNoneMode (), telemetry_runtime_producer ) # no listener
969983 recorder = PipelinedRecorder (redis_client .pipeline , impmanager , storages ['events' ],
970- storages ['impressions' ], telemetry_redis_storage )
984+ storages ['impressions' ], telemetry_redis_storage , imp_counter = ImpressionsCounter () )
971985 self .factory = SplitFactory ('some_api_key' ,
972986 storages ,
973987 True ,
@@ -1155,7 +1169,7 @@ def setup_method(self):
11551169 }
11561170 impmanager = ImpressionsManager (StrategyDebugMode (), StrategyNoneMode (), telemetry_runtime_producer ) # no listener
11571171 recorder = PipelinedRecorder (redis_client .pipeline , impmanager ,
1158- storages ['events' ], storages ['impressions' ], telemetry_redis_storage )
1172+ storages ['events' ], storages ['impressions' ], telemetry_redis_storage , imp_counter = ImpressionsCounter () )
11591173 self .factory = SplitFactory ('some_api_key' ,
11601174 storages ,
11611175 True ,
@@ -1375,7 +1389,7 @@ def setup_method(self):
13751389
13761390 impmanager = ImpressionsManager (StrategyDebugMode (), StrategyNoneMode (), telemetry_runtime_producer ) # no listener
13771391 recorder = StandardRecorder (impmanager , storages ['events' ],
1378- storages ['impressions' ], telemetry_evaluation_producer , telemetry_runtime_producer )
1392+ storages ['impressions' ], telemetry_evaluation_producer , telemetry_runtime_producer , imp_counter = ImpressionsCounter () )
13791393
13801394 self .factory = SplitFactory ('some_api_key' ,
13811395 storages ,
@@ -1570,7 +1584,7 @@ def setup_method(self):
15701584
15711585 impmanager = ImpressionsManager (StrategyOptimizedMode (), StrategyNoneMode (), telemetry_runtime_producer ) # no listener
15721586 recorder = StandardRecorder (impmanager , storages ['events' ],
1573- storages ['impressions' ], telemetry_evaluation_producer , telemetry_runtime_producer )
1587+ storages ['impressions' ], telemetry_evaluation_producer , telemetry_runtime_producer , imp_counter = ImpressionsCounter () )
15741588
15751589 self .factory = SplitFactory ('some_api_key' ,
15761590 storages ,
@@ -1617,7 +1631,7 @@ def test_get_treatment(self):
16171631 client .get_treatment ('user1' , 'sample_feature' )
16181632 client .get_treatment ('user1' , 'sample_feature' )
16191633 client .get_treatment ('user1' , 'sample_feature' )
1620- assert self .pluggable_storage_adapter ._keys ['SPLITIO.impressions' ] == []
1634+ assert len ( self .pluggable_storage_adapter ._keys ['SPLITIO.impressions' ]) == 1
16211635
16221636 def test_get_treatment_with_config (self ):
16231637 """Test client.get_treatment_with_config()."""
@@ -2317,7 +2331,7 @@ async def _setup_method(self):
23172331 'events' : InMemoryEventStorageAsync (5000 , telemetry_runtime_producer ),
23182332 }
23192333 impmanager = ImpressionsManager (StrategyDebugMode (), StrategyNoneMode (), telemetry_runtime_producer ) # no listener
2320- recorder = StandardRecorderAsync (impmanager , storages ['events' ], storages ['impressions' ], telemetry_evaluation_producer , telemetry_runtime_producer )
2334+ recorder = StandardRecorderAsync (impmanager , storages ['events' ], storages ['impressions' ], telemetry_evaluation_producer , telemetry_runtime_producer , imp_counter = ImpressionsCounter () )
23212335 # Since we are passing None as SDK_Ready event, the factory will use the Redis telemetry call, using try catch to ignore the exception.
23222336 try :
23232337 self .factory = SplitFactoryAsync ('some_api_key' ,
@@ -2839,7 +2853,7 @@ async def _setup_method(self):
28392853 }
28402854 impmanager = ImpressionsManager (StrategyDebugMode (), StrategyNoneMode (), telemetry_runtime_producer ) # no listener
28412855 recorder = PipelinedRecorderAsync (redis_client .pipeline , impmanager , storages ['events' ],
2842- storages ['impressions' ], telemetry_redis_storage )
2856+ storages ['impressions' ], telemetry_redis_storage , imp_counter = ImpressionsCounter () )
28432857 self .factory = SplitFactoryAsync ('some_api_key' ,
28442858 storages ,
28452859 True ,
@@ -3061,7 +3075,7 @@ async def _setup_method(self):
30613075 }
30623076 impmanager = ImpressionsManager (StrategyDebugMode (), StrategyNoneMode (), telemetry_runtime_producer ) # no listener
30633077 recorder = PipelinedRecorderAsync (redis_client .pipeline , impmanager , storages ['events' ],
3064- storages ['impressions' ], telemetry_redis_storage )
3078+ storages ['impressions' ], telemetry_redis_storage , imp_counter = ImpressionsCounter () )
30653079 self .factory = SplitFactoryAsync ('some_api_key' ,
30663080 storages ,
30673081 True ,
@@ -3293,7 +3307,7 @@ async def _setup_method(self):
32933307 recorder = StandardRecorderAsync (impmanager , storages ['events' ],
32943308 storages ['impressions' ],
32953309 telemetry_producer .get_telemetry_evaluation_producer (),
3296- telemetry_runtime_producer )
3310+ telemetry_runtime_producer , imp_counter = ImpressionsCounter () )
32973311
32983312 self .factory = SplitFactoryAsync ('some_api_key' ,
32993313 storages ,
0 commit comments