@@ -66,7 +66,7 @@ def __init__(self, datafile, logger, error_handler):
6666
6767 # Utility maps for quick lookup
6868 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 )
7070 self .event_key_map = self ._generate_key_map (self .events , 'key' , entities .Event )
7171 self .attribute_key_map = self ._generate_key_map (self .attributes , 'key' , entities .Attribute )
7272
@@ -82,27 +82,36 @@ def __init__(self, datafile, logger, error_handler):
8282 self .rollout_id_map = self ._generate_key_map (self .rollouts , 'id' , entities .Layer )
8383 for layer in self .rollout_id_map .values ():
8484 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 )
8686
8787 self .audience_id_map = self ._deserialize_audience (self .audience_id_map )
8888 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 ():
9191 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 )
9393
94- self .experiment_id_map = {}
94+ self .experiment_key_map = {}
9595 self .variation_key_map = {}
9696 self .variation_id_map = {}
9797 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
100103 self .variation_key_map [experiment .key ] = self ._generate_key_map (
101104 experiment .variations , 'key' , entities .Variation
102105 )
106+
103107 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+
104111 for variation in self .variation_key_map .get (experiment .key ).values ():
105112 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
106115 self .variation_variable_usage_map [variation .id ] = self ._generate_key_map (
107116 variation .variables , 'id' , entities .Variation .VariableUsage
108117 )
@@ -537,3 +546,35 @@ def is_feature_experiment(self, experiment_id):
537546 """
538547
539548 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