Skip to content

Commit 9d63477

Browse files
Merge branch 'farhan-anjum/FSSDK-11175-add-decision-service-methods-for-cmab' into farhan-anjum/FSSDK-11184-update-impression-event-for-cmab
2 parents fdcdfbf + a129854 commit 9d63477

File tree

2 files changed

+22
-27
lines changed

2 files changed

+22
-27
lines changed

optimizely/optimizely.py

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
from .decision.optimizely_decide_option import OptimizelyDecideOption
3131
from .decision.optimizely_decision import OptimizelyDecision
3232
from .decision.optimizely_decision_message import OptimizelyDecisionMessage
33-
from .decision_service import Decision, VariationResult
33+
from .decision_service import Decision
3434
from .error_handler import NoOpErrorHandler, BaseErrorHandler
3535
from .event import event_factory, user_event_factory
3636
from .event.event_processor import BatchEventProcessor, BaseEventProcessor
@@ -538,13 +538,8 @@ def activate(self, experiment_key: str, user_id: str, attributes: Optional[UserA
538538
self.logger.error(enums.Errors.INVALID_PROJECT_CONFIG.format('activate'))
539539
return None
540540

541-
variation_result = self.get_variation(experiment_key, user_id, attributes)
542-
variation_key = None
543-
cmab_uuid = None
544-
if variation_result and variation_result['variation']:
545-
variation_key = variation_result['variation'].key
546-
if variation_result and variation_result['cmab_uuid']:
547-
cmab_uuid = variation_result['cmab_uuid']
541+
variation_key = self.get_variation(experiment_key, user_id, attributes)
542+
548543
if not variation_key:
549544
self.logger.info(f'Not activating user "{user_id}".')
550545
return None
@@ -558,7 +553,7 @@ def activate(self, experiment_key: str, user_id: str, attributes: Optional[UserA
558553
# Create and dispatch impression event
559554
self.logger.info(f'Activating user "{user_id}" in experiment "{experiment.key}".')
560555
self._send_impression_event(project_config, experiment, variation, '', experiment.key,
561-
enums.DecisionSources.EXPERIMENT, True, user_id, attributes, cmab_uuid)
556+
enums.DecisionSources.EXPERIMENT, True, user_id, attributes)
562557

563558
return variation.key
564559

@@ -620,18 +615,17 @@ def track(
620615

621616
def get_variation(
622617
self, experiment_key: str, user_id: str, attributes: Optional[UserAttributes] = None
623-
) -> Optional[VariationResult]:
624-
"""
625-
Returns the variation result for the given user in the specified experiment.
618+
) -> Optional[str]:
619+
""" Gets variation where user will be bucketed.
626620
627621
Args:
628-
experiment_key: The key identifying the experiment.
629-
user_id: The user ID.
630-
attributes: Optional dictionary of user attributes.
622+
experiment_key: Experiment for which user variation needs to be determined.
623+
user_id: ID for user.
624+
attributes: Dict representing user attributes.
631625
632626
Returns:
633-
A VariationResult object containing the variation assigned to the user, or None if the user is not
634-
bucketed into any variation or the experiment is not running.
627+
Variation key representing the variation the user will be bucketed in.
628+
None if user is not in experiment or if experiment is not Running.
635629
"""
636630

637631
if not self.is_valid:
@@ -684,7 +678,7 @@ def get_variation(
684678
{'experiment_key': experiment_key, 'variation_key': variation_key},
685679
)
686680

687-
return variation_result
681+
return variation_key
688682

689683
def is_feature_enabled(self, feature_key: str, user_id: str, attributes: Optional[UserAttributes] = None) -> bool:
690684
""" Returns true if the feature is enabled for the given user.

tests/test_optimizely.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1852,7 +1852,7 @@ def test_get_variation(self):
18521852
'optimizely.decision_service.DecisionService.get_variation',
18531853
return_value=variation_result,
18541854
), mock.patch('optimizely.notification_center.NotificationCenter.send_notifications') as mock_broadcast:
1855-
variation = self.optimizely.get_variation('test_experiment', 'test_user')['variation'].key
1855+
variation = self.optimizely.get_variation('test_experiment', 'test_user')
18561856
self.assertEqual(
18571857
'variation', variation,
18581858
)
@@ -1885,7 +1885,7 @@ def test_get_variation_lookup_and_save_is_called(self):
18851885
) as mock_load_user_profile, mock.patch(
18861886
'optimizely.user_profile.UserProfileTracker.save_user_profile'
18871887
) as mock_save_user_profile:
1888-
variation = self.optimizely.get_variation('test_experiment', 'test_user')['variation'].key
1888+
variation = self.optimizely.get_variation('test_experiment', 'test_user')
18891889
self.assertEqual(
18901890
'variation', variation,
18911891
)
@@ -1917,7 +1917,7 @@ def test_get_variation_with_experiment_in_feature(self):
19171917
'optimizely.decision_service.DecisionService.get_variation',
19181918
return_value=variation_result,
19191919
), mock.patch('optimizely.notification_center.NotificationCenter.send_notifications') as mock_broadcast:
1920-
variation = opt_obj.get_variation('test_experiment', 'test_user')['variation'].key
1920+
variation = opt_obj.get_variation('test_experiment', 'test_user')
19211921
self.assertEqual('variation', variation)
19221922

19231923
self.assertEqual(mock_broadcast.call_count, 1)
@@ -1946,7 +1946,7 @@ def test_get_variation__returns_none(self):
19461946
None,
19471947
self.optimizely.get_variation(
19481948
'test_experiment', 'test_user', attributes={'test_attribute': 'test_value'},
1949-
)['variation'],
1949+
),
19501950
)
19511951

19521952
self.assertEqual(mock_broadcast.call_count, 1)
@@ -5283,7 +5283,7 @@ def test_get_variation__forced_bucketing(self):
52835283
)
52845284
variation_key = self.optimizely.get_variation(
52855285
'test_experiment', 'test_user', attributes={'test_attribute': 'test_value'}
5286-
)['variation'].key
5286+
)
52875287
self.assertEqual('variation', variation_key)
52885288

52895289
def test_get_variation__experiment_not_running__forced_bucketing(self):
@@ -5298,7 +5298,7 @@ def test_get_variation__experiment_not_running__forced_bucketing(self):
52985298
)
52995299
variation_key = self.optimizely.get_variation(
53005300
'test_experiment', 'test_user', attributes={'test_attribute': 'test_value'},
5301-
)['variation']
5301+
)
53025302
self.assertIsNone(variation_key)
53035303
mock_is_experiment_running.assert_called_once_with(
53045304
self.project_config.get_experiment_from_key('test_experiment')
@@ -5312,7 +5312,7 @@ def test_get_variation__whitelisted_user_forced_bucketing(self):
53125312
self.assertEqual('group_exp_1_variation', forced_variation)
53135313
variation_key = self.optimizely.get_variation(
53145314
'group_exp_1', 'user_1', attributes={'test_attribute': 'test_value'}
5315-
)['variation'].key
5315+
)
53165316
self.assertEqual('group_exp_1_variation', variation_key)
53175317

53185318
def test_get_variation__user_profile__forced_bucketing(self):
@@ -5327,7 +5327,7 @@ def test_get_variation__user_profile__forced_bucketing(self):
53275327
)
53285328
variation_key = self.optimizely.get_variation(
53295329
'test_experiment', 'test_user', attributes={'test_attribute': 'test_value'},
5330-
)['variation'].key
5330+
)
53315331
self.assertEqual('variation', variation_key)
53325332

53335333
def test_get_variation__invalid_attributes__forced_bucketing(self):
@@ -5339,7 +5339,8 @@ def test_get_variation__invalid_attributes__forced_bucketing(self):
53395339
)
53405340
variation_key = self.optimizely.get_variation(
53415341
'test_experiment', 'test_user', attributes={'test_attribute': 'test_value_invalid'},
5342-
)['variation'].key
5342+
)
5343+
variation_key = variation_key
53435344
self.assertEqual('variation', variation_key)
53445345

53455346
def test_set_forced_variation__invalid_object(self):

0 commit comments

Comments
 (0)