@@ -68,7 +68,7 @@ def __init__(self, datafile, logger, error_handler):
68
68
69
69
# Utility maps for quick lookup
70
70
self .group_id_map = self ._generate_key_map (self .groups , 'id' , entities .Group )
71
- self .experiment_key_map = self ._generate_key_map (self .experiments , 'key ' , entities .Experiment )
71
+ self .experiment_id_map = self ._generate_key_map (self .experiments , 'id ' , entities .Experiment )
72
72
self .event_key_map = self ._generate_key_map (self .events , 'key' , entities .Event )
73
73
self .attribute_key_map = self ._generate_key_map (self .attributes , 'key' , entities .Attribute )
74
74
@@ -84,27 +84,36 @@ def __init__(self, datafile, logger, error_handler):
84
84
self .rollout_id_map = self ._generate_key_map (self .rollouts , 'id' , entities .Layer )
85
85
for layer in self .rollout_id_map .values ():
86
86
for experiment in layer .experiments :
87
- self .experiment_key_map [experiment ['key ' ]] = entities .Experiment (** experiment )
87
+ self .experiment_id_map [experiment ['id ' ]] = entities .Experiment (** experiment )
88
88
89
89
self .audience_id_map = self ._deserialize_audience (self .audience_id_map )
90
90
for group in self .group_id_map .values ():
91
- experiments_in_group_key_map = self ._generate_key_map (group .experiments , 'key ' , entities .Experiment )
92
- for experiment in experiments_in_group_key_map .values ():
91
+ experiments_in_group_id_map = self ._generate_key_map (group .experiments , 'id ' , entities .Experiment )
92
+ for experiment in experiments_in_group_id_map .values ():
93
93
experiment .__dict__ .update ({'groupId' : group .id , 'groupPolicy' : group .policy })
94
- self .experiment_key_map .update (experiments_in_group_key_map )
94
+ self .experiment_id_map .update (experiments_in_group_id_map )
95
95
96
- self .experiment_id_map = {}
96
+ self .experiment_key_map = {}
97
97
self .variation_key_map = {}
98
98
self .variation_id_map = {}
99
99
self .variation_variable_usage_map = {}
100
- for experiment in self .experiment_key_map .values ():
101
- self .experiment_id_map [experiment .id ] = experiment
100
+ self .variation_id_map_by_experiment_id = {}
101
+ self .variation_key_map_by_experiment_id = {}
102
+
103
+ for experiment in self .experiment_id_map .values ():
104
+ self .experiment_key_map [experiment .key ] = experiment
102
105
self .variation_key_map [experiment .key ] = self ._generate_key_map (
103
106
experiment .variations , 'key' , entities .Variation
104
107
)
108
+
105
109
self .variation_id_map [experiment .key ] = {}
110
+ self .variation_id_map_by_experiment_id [experiment .id ] = {}
111
+ self .variation_key_map_by_experiment_id [experiment .id ] = {}
112
+
106
113
for variation in self .variation_key_map .get (experiment .key ).values ():
107
114
self .variation_id_map [experiment .key ][variation .id ] = variation
115
+ self .variation_id_map_by_experiment_id [experiment .id ][variation .id ] = variation
116
+ self .variation_key_map_by_experiment_id [experiment .id ][variation .key ] = variation
108
117
self .variation_variable_usage_map [variation .id ] = self ._generate_key_map (
109
118
variation .variables , 'id' , entities .Variation .VariableUsage
110
119
)
@@ -557,3 +566,35 @@ def is_feature_experiment(self, experiment_id):
557
566
"""
558
567
559
568
return experiment_id in self .experiment_feature_map
569
+
570
+ def get_variation_from_id_by_experiment_id (self , experiment_id , variation_id ):
571
+ """ Gets variation from variation id and specific experiment id
572
+
573
+ Returns:
574
+ The variation for the experiment id and variation id
575
+ or empty dict if not found
576
+ """
577
+ if (experiment_id in self .variation_id_map_by_experiment_id and
578
+ variation_id in self .variation_id_map_by_experiment_id [experiment_id ]):
579
+ return self .variation_id_map_by_experiment_id [experiment_id ][variation_id ]
580
+
581
+ self .logger .error ('Variation with id "%s" not defined in the datafile for experiment "%s".' ,
582
+ variation_id , experiment_id )
583
+
584
+ return {}
585
+
586
+ def get_variation_from_key_by_experiment_id (self , experiment_id , variation_key ):
587
+ """ Gets variation from variation key and specific experiment id
588
+
589
+ Returns:
590
+ The variation for the experiment id and variation key
591
+ or empty dict if not found
592
+ """
593
+ if (experiment_id in self .variation_key_map_by_experiment_id and
594
+ variation_key in self .variation_key_map_by_experiment_id [experiment_id ]):
595
+ return self .variation_key_map_by_experiment_id [experiment_id ][variation_key ]
596
+
597
+ self .logger .error ('Variation with key "%s" not defined in the datafile for experiment "%s".' ,
598
+ variation_key , experiment_id )
599
+
600
+ return {}
0 commit comments