1- # Copyright 2016-2022 , Optimizely
1+ # Copyright 2016-2023 , Optimizely
22# Licensed under the Apache License, Version 2.0 (the "License");
33# you may not use this file except in compliance with the License.
44# You may obtain a copy of the License at
3737from .helpers .sdk_settings import OptimizelySdkSettings
3838from .helpers .enums import DecisionSources
3939from .notification_center import NotificationCenter
40+ from .notification_center_registry import _NotificationCenterRegistry
4041from .odp .lru_cache import LRUCache
4142from .odp .odp_manager import OdpManager
4243from .optimizely_config import OptimizelyConfig , OptimizelyConfigService
@@ -143,18 +144,6 @@ def __init__(
143144 self .logger .exception (str (error ))
144145 return
145146
146- self .setup_odp ()
147-
148- self .odp_manager = OdpManager (
149- self .sdk_settings .odp_disabled ,
150- self .sdk_settings .segments_cache ,
151- self .sdk_settings .odp_segment_manager ,
152- self .sdk_settings .odp_event_manager ,
153- self .sdk_settings .fetch_segments_timeout ,
154- self .sdk_settings .odp_event_timeout ,
155- self .logger
156- )
157-
158147 config_manager_options : dict [str , Any ] = {
159148 'datafile' : datafile ,
160149 'logger' : self .logger ,
@@ -174,8 +163,8 @@ def __init__(
174163 else :
175164 self .config_manager = StaticConfigManager (** config_manager_options )
176165
177- if not self .sdk_settings . odp_disabled :
178- self ._update_odp_config_on_datafile_update ( )
166+ self .odp_manager : OdpManager
167+ self .setup_odp ( self . config_manager . get_sdk_key () )
179168
180169 self .event_builder = event_builder .EventBuilder ()
181170 self .decision_service = decision_service .DecisionService (self .logger , user_profile_service )
@@ -1303,28 +1292,46 @@ def _decide_for_keys(
13031292 decisions [key ] = decision
13041293 return decisions
13051294
1306- def setup_odp (self ) -> None :
1295+ def setup_odp (self , sdk_key : Optional [ str ] ) -> None :
13071296 """
1308- - Make sure cache is instantiated with provided parameters or defaults.
1297+ - Make sure odp manager is instantiated with provided parameters or defaults.
13091298 - Set up listener to update odp_config when datafile is updated.
1299+ - Manually call callback in case datafile was received before the listener was registered.
13101300 """
1311- if self .sdk_settings .odp_disabled :
1312- return
13131301
1314- self .notification_center .add_notification_listener (
1315- enums .NotificationTypes .OPTIMIZELY_CONFIG_UPDATE ,
1316- self ._update_odp_config_on_datafile_update
1302+ # no need to instantiate a cache if a custom cache or segment manager is provided.
1303+ if (
1304+ not self .sdk_settings .odp_disabled and
1305+ not self .sdk_settings .odp_segment_manager and
1306+ not self .sdk_settings .segments_cache
1307+ ):
1308+ self .sdk_settings .segments_cache = LRUCache (
1309+ self .sdk_settings .segments_cache_size ,
1310+ self .sdk_settings .segments_cache_timeout_in_secs
1311+ )
1312+
1313+ self .odp_manager = OdpManager (
1314+ self .sdk_settings .odp_disabled ,
1315+ self .sdk_settings .segments_cache ,
1316+ self .sdk_settings .odp_segment_manager ,
1317+ self .sdk_settings .odp_event_manager ,
1318+ self .sdk_settings .fetch_segments_timeout ,
1319+ self .sdk_settings .odp_event_timeout ,
1320+ self .logger
13171321 )
13181322
1319- if self .sdk_settings .odp_segment_manager :
1323+ if self .sdk_settings .odp_disabled :
13201324 return
13211325
1322- if not self .sdk_settings .segments_cache :
1323- self .sdk_settings .segments_cache = LRUCache (
1324- self .sdk_settings .segments_cache_size ,
1325- self .sdk_settings .segments_cache_timeout_in_secs
1326+ internal_notification_center = _NotificationCenterRegistry .get_notification_center (sdk_key , self .logger )
1327+ if internal_notification_center :
1328+ internal_notification_center .add_notification_listener (
1329+ enums .NotificationTypes .OPTIMIZELY_CONFIG_UPDATE ,
1330+ self ._update_odp_config_on_datafile_update
13261331 )
13271332
1333+ self ._update_odp_config_on_datafile_update ()
1334+
13281335 def _update_odp_config_on_datafile_update (self ) -> None :
13291336 config = None
13301337
0 commit comments