2727from splitio .api .impressions import ImpressionsAPI
2828from splitio .api .events import EventsAPI
2929from splitio .api .auth import AuthAPI
30+ from splitio .api .telemetry import TelemetryAPI
3031
3132# Tasks
3233from splitio .tasks .split_sync import SplitSynchronizationTask
3334from splitio .tasks .segment_sync import SegmentSynchronizationTask
3435from splitio .tasks .impressions_sync import ImpressionsSyncTask , ImpressionsCountSyncTask
3536from splitio .tasks .events_sync import EventsSyncTask
37+ from splitio .tasks .unique_keys_sync import UniqueKeysSyncTask , ClearFilterSyncTask
3638
3739# Synchronizer
3840from splitio .sync .synchronizer import SplitTasks , SplitSynchronizers , Synchronizer , \
4244from splitio .sync .segment import SegmentSynchronizer
4345from splitio .sync .impression import ImpressionSynchronizer , ImpressionsCountSynchronizer
4446from splitio .sync .event import EventSynchronizer
47+ from splitio .sync .unique_keys import UniqueKeysSynchronizer , ClearFilterSynchronizer
48+
4549
4650# Recorder
4751from splitio .recorder .recorder import StandardRecorder , PipelinedRecorder
@@ -283,7 +287,7 @@ def _wrap_impression_listener(listener, metadata):
283287
284288
285289def _build_in_memory_factory (api_key , cfg , sdk_url = None , events_url = None , # pylint:disable=too-many-arguments,too-many-locals
286- auth_api_base_url = None , streaming_api_base_url = None ):
290+ auth_api_base_url = None , streaming_api_base_url = None , telemetry_api_base_url = None ):
287291 """Build and return a split factory tailored to the supplied config."""
288292 if not input_validator .validate_factory_instantiation (api_key ):
289293 return None
@@ -292,6 +296,7 @@ def _build_in_memory_factory(api_key, cfg, sdk_url=None, events_url=None, # pyl
292296 sdk_url = sdk_url ,
293297 events_url = events_url ,
294298 auth_url = auth_api_base_url ,
299+ telemetry_url = telemetry_api_base_url ,
295300 timeout = cfg .get ('connectionTimeout' )
296301 )
297302
@@ -302,6 +307,7 @@ def _build_in_memory_factory(api_key, cfg, sdk_url=None, events_url=None, # pyl
302307 'segments' : SegmentsAPI (http_client , api_key , sdk_metadata ),
303308 'impressions' : ImpressionsAPI (http_client , api_key , sdk_metadata , cfg ['impressionsMode' ]),
304309 'events' : EventsAPI (http_client , api_key , sdk_metadata ),
310+ 'telemtery' : TelemetryAPI (http_client , api_key , sdk_metadata ),
305311 }
306312
307313 if not input_validator .validate_apikey_type (apis ['segments' ]):
@@ -326,6 +332,8 @@ def _build_in_memory_factory(api_key, cfg, sdk_url=None, events_url=None, # pyl
326332 cfg ['impressionsBulkSize' ]),
327333 EventSynchronizer (apis ['events' ], storages ['events' ], cfg ['eventsBulkSize' ]),
328334 ImpressionsCountSynchronizer (apis ['impressions' ], imp_manager ),
335+ UniqueKeysSynchronizer (), # TODO: Pass the UniqueKeysTracker instance fetched from Strategy instance created above.
336+ ClearFilterSynchronizer (), # TODO: Pass the UniqueKeysTracker instance fetched from Strategy instance created above.
329337 )
330338
331339 tasks = SplitTasks (
@@ -342,7 +350,9 @@ def _build_in_memory_factory(api_key, cfg, sdk_url=None, events_url=None, # pyl
342350 cfg ['impressionsRefreshRate' ],
343351 ),
344352 EventsSyncTask (synchronizers .events_sync .synchronize_events , cfg ['eventsPushRate' ]),
345- ImpressionsCountSyncTask (synchronizers .impressions_count_sync .synchronize_counters )
353+ ImpressionsCountSyncTask (synchronizers .impressions_count_sync .synchronize_counters ),
354+ UniqueKeysSyncTask (synchronizers .unique_keys_sync .SendAll ),
355+ ClearFilterSyncTask (synchronizers .clear_filter_sync .clearAll )
346356 )
347357
348358 synchronizer = Synchronizer (synchronizers , tasks )
@@ -355,6 +365,7 @@ def _build_in_memory_factory(api_key, cfg, sdk_url=None, events_url=None, # pyl
355365
356366 storages ['events' ].set_queue_full_hook (tasks .events_task .flush )
357367 storages ['impressions' ].set_queue_full_hook (tasks .impressions_task .flush )
368+ # TODO: Add unique_keys_tracker.set_queue_full_hook(tasks.unique_keys.flush)
358369
359370 recorder = StandardRecorder (
360371 imp_manager ,
0 commit comments