Skip to content

Commit f1b8c26

Browse files
[jbrown] - Changes made to clean up formatting, addition of _generate_id_map to remove confusion, and case fixes.
1 parent 2e4f867 commit f1b8c26

File tree

4 files changed

+239
-230
lines changed

4 files changed

+239
-230
lines changed

optimizely/decision_service.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,6 @@ def get_variation_for_rollout(self, project_config, rollout, user_id, attributes
342342
for idx in range(len(rollout.experiments) - 1):
343343
logging_key = str(idx + 1)
344344
rollout_rule = project_config.get_experiment_from_id(rollout.experiments[idx].get('id'))
345-
# rollout_rule = optimizely.entities.Experiment(**rollout.experiments[idx])
346345
# Check if user meets audience conditions for targeting rule
347346
audience_conditions = rollout_rule.get_audience_conditions_or_ids()
348347
user_meets_audience_conditions, reasons_received = audience_helper.does_user_meet_audience_conditions(

optimizely/project_config.py

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -69,34 +69,34 @@ def __init__(self, datafile, logger, error_handler):
6969
self.bot_filtering = config.get('botFiltering', None)
7070

7171
# 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)
7474
self.experiment_key_map = self._generate_key_map(self.experiments, 'key', entities.Experiment)
7575
self.event_key_map = self._generate_key_map(self.events, 'key', entities.Event)
7676
self.attribute_key_map = self._generate_key_map(self.attributes, 'key', entities.Attribute)
7777

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)
7979

8080
# Conditions of audiences in typedAudiences are not expected
8181
# to be string-encoded as they are in audiences.
8282
for typed_audience in self.typed_audiences:
8383
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)
8585
self.audience_id_map.update(typed_audience_id_map)
8686

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)
8888
for layer in self.rollout_id_map.values():
8989
for experiment in layer.experiments:
9090
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)
9292

9393
self.audience_id_map = self._deserialize_audience(self.audience_id_map)
9494
for group in self.group_id_map.values():
9595
experiments_in_group_key_map = self._generate_key_map(group.experiments, 'key', entities.Experiment)
9696
for experiment in experiments_in_group_key_map.values():
9797
experiment.__dict__.update({'groupId': group.id, 'groupPolicy': group.policy})
9898
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)
100100
for experiment in experiments_in_group_id_map.values():
101101
experiment.__dict__.update({'groupId': group.id, 'groupPolicy': group.policy})
102102
self.experiment_key_map.update(experiments_in_group_id_map)
@@ -114,30 +114,22 @@ def __init__(self, datafile, logger, error_handler):
114114
self.variation_id_map[experiment.key] = {}
115115
for variation in self.variation_key_map.get(experiment.key).values():
116116
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(
118118
variation.variables, 'id', entities.Variation.VariableUsage
119119
)
120120
self.correct_variation_id_map = {}
121121
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(
124124
experiment.variations, 'id', entities.Variation
125125
)
126126
self.correct_variation_id_map[experiment.id] = {}
127127
for variation in self.temp_variation_id_map.get(experiment.id).values():
128128
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(
130130
variation.variables, 'id', entities.Variation.VariableUsage
131131
)
132132

133-
134-
135-
136-
137-
138-
139-
140-
141133
self.feature_key_map = self._generate_key_map(self.feature_flags, 'key', entities.FeatureFlag)
142134

143135
# 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):
178170

179171
return key_map
180172

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+
181192
@staticmethod
182193
def _deserialize_audience(audience_map):
183194
""" 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):
309320
Experiment corresponding to the provided experiment ID.
310321
"""
311322

312-
# experiment = self.experiment_id_map.get(experiment_id)
313323
experiment = self.experimentID_map.get(experiment_id)
314324
if experiment:
315325
return experiment
@@ -391,7 +401,6 @@ def get_variation_from_id(self, experiment_key, variation_id):
391401
Object representing the variation.
392402
"""
393403

394-
#variation_map = self.variation_id_map.get(experiment_key)
395404
variation_map = self.correct_variation_id_map.get(experiment_key)
396405
if variation_map:
397406
variation = variation_map.get(variation_id)

0 commit comments

Comments
 (0)