Skip to content

Commit d6329af

Browse files
committed
Fix FSC holdout test cases
1 parent a20c3a2 commit d6329af

File tree

3 files changed

+16
-7
lines changed

3 files changed

+16
-7
lines changed

optimizely/decision_service.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -824,9 +824,9 @@ def get_variation_for_holdout(
824824
self.logger.info(message)
825825
decide_reasons.append(message)
826826

827-
# Create Decision for holdout - experiment is None, source is HOLDOUT
827+
# Create Decision for holdout - pass holdout dict as experiment so rule_key can be extracted
828828
holdout_decision: Decision = Decision(
829-
experiment=None,
829+
experiment=holdout, # type: ignore[arg-type]
830830
variation=variation,
831831
source=enums.DecisionSources.HOLDOUT,
832832
cmab_uuid=None

optimizely/event/user_event_factory.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,9 @@ def create_impression_event(
6767
variation: Optional[Variation] = None
6868
experiment_id = None
6969
if activated_experiment:
70-
experiment_id = activated_experiment.id
70+
# For holdouts, activated_experiment is a dict; for experiments, it's an Experiment entity
71+
experiment_id = (activated_experiment['id'] if isinstance(activated_experiment, dict)
72+
else activated_experiment.id)
7173

7274
if variation_id and flag_key:
7375
# need this condition when we send events involving forced decisions

optimizely/optimizely.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1252,7 +1252,12 @@ def _create_optimizely_decision(
12521252

12531253
# Create Optimizely Decision Result.
12541254
attributes = user_context.get_user_attributes()
1255-
rule_key = flag_decision.experiment.key if flag_decision.experiment else None
1255+
# For holdouts, experiment is a dict; for experiments, it's an Experiment entity
1256+
if flag_decision.experiment:
1257+
rule_key = (flag_decision.experiment['key'] if isinstance(flag_decision.experiment, dict)
1258+
else flag_decision.experiment.key)
1259+
else:
1260+
rule_key = None
12561261
all_variables = {}
12571262
decision_source = flag_decision.source
12581263
decision_event_dispatched = False
@@ -1303,9 +1308,11 @@ def _create_optimizely_decision(
13031308

13041309
try:
13051310
if flag_decision.experiment is not None:
1306-
experiment_id = flag_decision.experiment.id
1307-
except AttributeError:
1308-
self.logger.warning("flag_decision.experiment has no attribute 'id'")
1311+
# For holdouts, experiment is a dict; for experiments, it's an Experiment entity
1312+
experiment_id = (flag_decision.experiment['id'] if isinstance(flag_decision.experiment, dict)
1313+
else flag_decision.experiment.id)
1314+
except (AttributeError, KeyError, TypeError):
1315+
self.logger.warning("Unable to extract experiment_id from flag_decision.experiment")
13091316

13101317
try:
13111318
if flag_decision.variation is not None:

0 commit comments

Comments
 (0)