@@ -69,34 +69,34 @@ def __init__(self, datafile, logger, error_handler):
69
69
self .bot_filtering = config .get ('botFiltering' , None )
70
70
71
71
# Utility maps for quick lookup
72
- self .group_id_map = self ._generate_key_map (self .groups , 'id' , entities .Group )
73
- self .experimentID_map = self ._generate_key_map (self .mapexperiment , 'id' , entities .Experiment )
72
+ self .group_id_map = self ._generate_id_map (self .groups , 'id' , entities .Group )
73
+ self .experiment_id_map = self ._generate_id_map (self .mapexperiment , 'id' , entities .Experiment )
74
74
self .experiment_key_map = self ._generate_key_map (self .experiments , 'key' , entities .Experiment )
75
75
self .event_key_map = self ._generate_key_map (self .events , 'key' , entities .Event )
76
76
self .attribute_key_map = self ._generate_key_map (self .attributes , 'key' , entities .Attribute )
77
77
78
- self .audience_id_map = self ._generate_key_map (self .audiences , 'id' , entities .Audience )
78
+ self .audience_id_map = self ._generate_id_map (self .audiences , 'id' , entities .Audience )
79
79
80
80
# Conditions of audiences in typedAudiences are not expected
81
81
# to be string-encoded as they are in audiences.
82
82
for typed_audience in self .typed_audiences :
83
83
typed_audience ['conditions' ] = json .dumps (typed_audience ['conditions' ])
84
- typed_audience_id_map = self ._generate_key_map (self .typed_audiences , 'id' , entities .Audience )
84
+ typed_audience_id_map = self ._generate_id_map (self .typed_audiences , 'id' , entities .Audience )
85
85
self .audience_id_map .update (typed_audience_id_map )
86
86
87
- self .rollout_id_map = self ._generate_key_map (self .rollouts , 'id' , entities .Layer )
87
+ self .rollout_id_map = self ._generate_id_map (self .rollouts , 'id' , entities .Layer )
88
88
for layer in self .rollout_id_map .values ():
89
89
for experiment in layer .experiments :
90
90
self .experiment_key_map [experiment ['key' ]] = entities .Experiment (** experiment )
91
- self .experimentID_map [experiment ['id' ]] = entities .Experiment (** experiment )
91
+ self .experiment_id_map [experiment ['id' ]] = entities .Experiment (** experiment )
92
92
93
93
self .audience_id_map = self ._deserialize_audience (self .audience_id_map )
94
94
for group in self .group_id_map .values ():
95
95
experiments_in_group_key_map = self ._generate_key_map (group .experiments , 'key' , entities .Experiment )
96
96
for experiment in experiments_in_group_key_map .values ():
97
97
experiment .__dict__ .update ({'groupId' : group .id , 'groupPolicy' : group .policy })
98
98
self .experiment_key_map .update (experiments_in_group_key_map )
99
- experiments_in_group_id_map = self ._generate_key_map (group .experiments , 'id' , entities .Experiment )
99
+ experiments_in_group_id_map = self ._generate_id_map (group .experiments , 'id' , entities .Experiment )
100
100
for experiment in experiments_in_group_id_map .values ():
101
101
experiment .__dict__ .update ({'groupId' : group .id , 'groupPolicy' : group .policy })
102
102
self .experiment_key_map .update (experiments_in_group_id_map )
@@ -114,30 +114,22 @@ def __init__(self, datafile, logger, error_handler):
114
114
self .variation_id_map [experiment .key ] = {}
115
115
for variation in self .variation_key_map .get (experiment .key ).values ():
116
116
self .variation_id_map [experiment .key ][variation .id ] = variation
117
- self .variation_variable_usage_map [variation .id ] = self ._generate_key_map (
117
+ self .variation_variable_usage_map [variation .id ] = self ._generate_id_map (
118
118
variation .variables , 'id' , entities .Variation .VariableUsage
119
119
)
120
120
self .correct_variation_id_map = {}
121
121
self .temp_variation_id_map = {}
122
- for experiment in self .experimentID_map .values ():
123
- self .temp_variation_id_map [experiment .id ] = self ._generate_key_map (
122
+ for experiment in self .experiment_id_map .values ():
123
+ self .temp_variation_id_map [experiment .id ] = self ._generate_id_map (
124
124
experiment .variations , 'id' , entities .Variation
125
125
)
126
126
self .correct_variation_id_map [experiment .id ] = {}
127
127
for variation in self .temp_variation_id_map .get (experiment .id ).values ():
128
128
self .correct_variation_id_map [experiment .id ][variation .id ] = variation
129
- self .variation_variable_usage_map [variation .id ] = self ._generate_key_map (
129
+ self .variation_variable_usage_map [variation .id ] = self ._generate_id_map (
130
130
variation .variables , 'id' , entities .Variation .VariableUsage
131
131
)
132
132
133
-
134
-
135
-
136
-
137
-
138
-
139
-
140
-
141
133
self .feature_key_map = self ._generate_key_map (self .feature_flags , 'key' , entities .FeatureFlag )
142
134
143
135
# As we cannot create json variables in datafile directly, here we convert
@@ -178,6 +170,25 @@ def _generate_key_map(entity_list, key, entity_class):
178
170
179
171
return key_map
180
172
173
+ @staticmethod
174
+ def _generate_id_map (entity_list , id , entity_class ):
175
+ """ Helper method to generate map from key to entity object for given list of dicts.
176
+
177
+ Args:
178
+ entity_list: List consisting of dict.
179
+ key: Key in each dict which will be key in the map.
180
+ entity_class: Class representing the entity.
181
+
182
+ Returns:
183
+ Map mapping key to entity object.
184
+ """
185
+
186
+ id_map = {}
187
+ for obj in entity_list :
188
+ id_map [obj [id ]] = entity_class (** obj )
189
+
190
+ return id_map
191
+
181
192
@staticmethod
182
193
def _deserialize_audience (audience_map ):
183
194
""" Helper method to de-serialize and populate audience map with the condition list and structure.
@@ -309,7 +320,6 @@ def get_experiment_from_id(self, experiment_id):
309
320
Experiment corresponding to the provided experiment ID.
310
321
"""
311
322
312
- # experiment = self.experiment_id_map.get(experiment_id)
313
323
experiment = self .experimentID_map .get (experiment_id )
314
324
if experiment :
315
325
return experiment
@@ -391,7 +401,6 @@ def get_variation_from_id(self, experiment_key, variation_id):
391
401
Object representing the variation.
392
402
"""
393
403
394
- #variation_map = self.variation_id_map.get(experiment_key)
395
404
variation_map = self .correct_variation_id_map .get (experiment_key )
396
405
if variation_map :
397
406
variation = variation_map .get (variation_id )
0 commit comments