44
44
from .optimizely_config import OptimizelyConfig , OptimizelyConfigService
45
45
from .optimizely_user_context import OptimizelyUserContext , UserAttributes
46
46
from .project_config import ProjectConfig
47
+ from .cmab .cmab_service import DefaultCmabService
47
48
48
49
if TYPE_CHECKING :
49
50
# prevent circular dependency by skipping import at runtime
@@ -69,7 +70,8 @@ def __init__(
69
70
datafile_access_token : Optional [str ] = None ,
70
71
default_decide_options : Optional [list [str ]] = None ,
71
72
event_processor_options : Optional [dict [str , Any ]] = None ,
72
- settings : Optional [OptimizelySdkSettings ] = None
73
+ settings : Optional [OptimizelySdkSettings ] = None ,
74
+ cmab_service : Optional [DefaultCmabService ] = None
73
75
) -> None :
74
76
""" Optimizely init method for managing Custom projects.
75
77
@@ -98,6 +100,7 @@ def __init__(
98
100
default_decide_options: Optional list of decide options used with the decide APIs.
99
101
event_processor_options: Optional dict of options to be passed to the default batch event processor.
100
102
settings: Optional instance of OptimizelySdkSettings for sdk configuration.
103
+ cmab_service: Optional instance of DefaultCmabService for Contextual Multi-Armed Bandit (CMAB) support.
101
104
"""
102
105
self .logger_name = '.' .join ([__name__ , self .__class__ .__name__ ])
103
106
self .is_valid = True
@@ -169,7 +172,10 @@ def __init__(
169
172
self ._setup_odp (self .config_manager .get_sdk_key ())
170
173
171
174
self .event_builder = event_builder .EventBuilder ()
172
- self .decision_service = decision_service .DecisionService (self .logger , user_profile_service )
175
+ if cmab_service :
176
+ cmab_service .logger = self .logger
177
+ self .cmab_service = cmab_service
178
+ self .decision_service = decision_service .DecisionService (self .logger , user_profile_service , cmab_service )
173
179
self .user_profile_service = user_profile_service
174
180
175
181
def _validate_instantiation_options (self ) -> None :
0 commit comments