@@ -66,7 +66,7 @@ def __init__(self, datafile, logger, error_handler):
66
66
67
67
# Utility maps for quick lookup
68
68
self .group_id_map = self ._generate_key_map (self .groups , 'id' , entities .Group )
69
- self .experiment_key_map = self ._generate_key_map (self .experiments , 'key ' , entities .Experiment )
69
+ self .experiment_id_map = self ._generate_key_map (self .experiments , 'id ' , entities .Experiment )
70
70
self .event_key_map = self ._generate_key_map (self .events , 'key' , entities .Event )
71
71
self .attribute_key_map = self ._generate_key_map (self .attributes , 'key' , entities .Attribute )
72
72
@@ -82,27 +82,36 @@ def __init__(self, datafile, logger, error_handler):
82
82
self .rollout_id_map = self ._generate_key_map (self .rollouts , 'id' , entities .Layer )
83
83
for layer in self .rollout_id_map .values ():
84
84
for experiment in layer .experiments :
85
- self .experiment_key_map [experiment ['key ' ]] = entities .Experiment (** experiment )
85
+ self .experiment_id_map [experiment ['id ' ]] = entities .Experiment (** experiment )
86
86
87
87
self .audience_id_map = self ._deserialize_audience (self .audience_id_map )
88
88
for group in self .group_id_map .values ():
89
- experiments_in_group_key_map = self ._generate_key_map (group .experiments , 'key ' , entities .Experiment )
90
- for experiment in experiments_in_group_key_map .values ():
89
+ experiments_in_group_id_map = self ._generate_key_map (group .experiments , 'id ' , entities .Experiment )
90
+ for experiment in experiments_in_group_id_map .values ():
91
91
experiment .__dict__ .update ({'groupId' : group .id , 'groupPolicy' : group .policy })
92
- self .experiment_key_map .update (experiments_in_group_key_map )
92
+ self .experiment_id_map .update (experiments_in_group_id_map )
93
93
94
- self .experiment_id_map = {}
94
+ self .experiment_key_map = {}
95
95
self .variation_key_map = {}
96
96
self .variation_id_map = {}
97
97
self .variation_variable_usage_map = {}
98
- for experiment in self .experiment_key_map .values ():
99
- self .experiment_id_map [experiment .id ] = experiment
98
+ self .variation_id_map_by_experiment_id = {}
99
+ self .variation_key_map_by_experiment_id = {}
100
+
101
+ for experiment in self .experiment_id_map .values ():
102
+ self .experiment_key_map [experiment .key ] = experiment
100
103
self .variation_key_map [experiment .key ] = self ._generate_key_map (
101
104
experiment .variations , 'key' , entities .Variation
102
105
)
106
+
103
107
self .variation_id_map [experiment .key ] = {}
108
+ self .variation_id_map_by_experiment_id [experiment .id ] = {}
109
+ self .variation_key_map_by_experiment_id [experiment .id ] = {}
110
+
104
111
for variation in self .variation_key_map .get (experiment .key ).values ():
105
112
self .variation_id_map [experiment .key ][variation .id ] = variation
113
+ self .variation_id_map_by_experiment_id [experiment .id ][variation .id ] = variation
114
+ self .variation_key_map_by_experiment_id [experiment .id ][variation .key ] = variation
106
115
self .variation_variable_usage_map [variation .id ] = self ._generate_key_map (
107
116
variation .variables , 'id' , entities .Variation .VariableUsage
108
117
)
@@ -537,3 +546,35 @@ def is_feature_experiment(self, experiment_id):
537
546
"""
538
547
539
548
return experiment_id in self .experiment_feature_map
549
+
550
+ def get_variation_from_id_by_experiment_id (self , experiment_id , variation_id ):
551
+ """ Gets variation from variation id and specific experiment id
552
+
553
+ Returns:
554
+ The variation for the experiment id and variation id
555
+ or empty dict if not found
556
+ """
557
+ if (experiment_id in self .variation_id_map_by_experiment_id and
558
+ variation_id in self .variation_id_map_by_experiment_id [experiment_id ]):
559
+ return self .variation_id_map_by_experiment_id [experiment_id ][variation_id ]
560
+
561
+ self .logger .error ('Variation with id "%s" not defined in the datafile for experiment "%s".' ,
562
+ variation_id , experiment_id )
563
+
564
+ return {}
565
+
566
+ def get_variation_from_key_by_experiment_id (self , experiment_id , variation_key ):
567
+ """ Gets variation from variation key and specific experiment id
568
+
569
+ Returns:
570
+ The variation for the experiment id and variation key
571
+ or empty dict if not found
572
+ """
573
+ if (experiment_id in self .variation_key_map_by_experiment_id and
574
+ variation_key in self .variation_key_map_by_experiment_id [experiment_id ]):
575
+ return self .variation_key_map_by_experiment_id [experiment_id ][variation_key ]
576
+
577
+ self .logger .error ('Variation with key "%s" not defined in the datafile for experiment "%s".' ,
578
+ variation_key , experiment_id )
579
+
580
+ return {}
0 commit comments