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