1
- # Copyright 2016-2022 , Optimizely
1
+ # Copyright 2016-2023 , Optimizely
2
2
# Licensed under the Apache License, Version 2.0 (the "License");
3
3
# you may not use this file except in compliance with the License.
4
4
# You may obtain a copy of the License at
37
37
from .helpers .sdk_settings import OptimizelySdkSettings
38
38
from .helpers .enums import DecisionSources
39
39
from .notification_center import NotificationCenter
40
+ from .notification_center_registry import _NotificationCenterRegistry
40
41
from .odp .lru_cache import LRUCache
41
42
from .odp .odp_manager import OdpManager
42
43
from .optimizely_config import OptimizelyConfig , OptimizelyConfigService
@@ -143,18 +144,6 @@ def __init__(
143
144
self .logger .exception (str (error ))
144
145
return
145
146
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
-
158
147
config_manager_options : dict [str , Any ] = {
159
148
'datafile' : datafile ,
160
149
'logger' : self .logger ,
@@ -174,8 +163,8 @@ def __init__(
174
163
else :
175
164
self .config_manager = StaticConfigManager (** config_manager_options )
176
165
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 () )
179
168
180
169
self .event_builder = event_builder .EventBuilder ()
181
170
self .decision_service = decision_service .DecisionService (self .logger , user_profile_service )
@@ -1303,28 +1292,46 @@ def _decide_for_keys(
1303
1292
decisions [key ] = decision
1304
1293
return decisions
1305
1294
1306
- def setup_odp (self ) -> None :
1295
+ def setup_odp (self , sdk_key : Optional [ str ] ) -> None :
1307
1296
"""
1308
- - Make sure cache is instantiated with provided parameters or defaults.
1297
+ - Make sure odp manager is instantiated with provided parameters or defaults.
1309
1298
- 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.
1310
1300
"""
1311
- if self .sdk_settings .odp_disabled :
1312
- return
1313
1301
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
1317
1321
)
1318
1322
1319
- if self .sdk_settings .odp_segment_manager :
1323
+ if self .sdk_settings .odp_disabled :
1320
1324
return
1321
1325
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
1326
1331
)
1327
1332
1333
+ self ._update_odp_config_on_datafile_update ()
1334
+
1328
1335
def _update_odp_config_on_datafile_update (self ) -> None :
1329
1336
config = None
1330
1337
0 commit comments