Skip to content

Commit 6222c08

Browse files
committed
Making function more generic and usable
1 parent c7aa5a3 commit 6222c08

File tree

2 files changed

+16
-13
lines changed

2 files changed

+16
-13
lines changed

optimizely/project_config.py

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ def __init__(self, datafile, logger, error_handler):
6161
self.event_key_map = self._generate_key_map(self.events, 'key', entities.Event)
6262
self.attribute_key_map = self._generate_key_map(self.attributes, 'key', entities.Attribute)
6363
self.audience_id_map = self._generate_key_map(self.audiences, 'id', entities.Audience)
64-
self.flag_id_map = self._generate_key_map(self.feature_flags, 'id', entities.FeatureFlag)
64+
self.feature_flag_id_map = self._generate_key_map(self.feature_flags, 'id', entities.FeatureFlag)
6565
self.audience_id_map = self._deserialize_audience(self.audience_id_map)
6666
for group in self.group_id_map.values():
6767
experiments_in_group_key_map = self._generate_key_map(group.experiments, 'key', entities.Experiment)
@@ -82,7 +82,9 @@ def __init__(self, datafile, logger, error_handler):
8282
)
8383
self.variation_id_map[experiment.key] = {}
8484
for variation in self.variation_key_map.get(experiment.key).values():
85-
self.variation_id_map[experiment.key][variation.id] = self._create_feature_flag_map(variation, self.flag_id_map)
85+
feature_flag_to_value_map = self._map_feature_flag_to_value(variation.variables, self.feature_flag_id_map)
86+
variation.featureFlagMap = feature_flag_to_value_map
87+
self.variation_id_map[experiment.key][variation.id] = variation
8688

8789
self.parsing_succeeded = True
8890

@@ -145,24 +147,25 @@ def _get_typecast_value(self, value, type):
145147
else:
146148
return value
147149

148-
def _create_feature_flag_map(self, variation, flag_id_map):
149-
""" Helper method to create map on variation object mapping feature flag key to related value.
150+
def _map_feature_flag_to_value(self, variables, feature_flag_id_map):
151+
""" Helper method to create map of feature flag key to associated value for a given variation's feature flag set.
150152
151153
Args:
152-
variation: Object representing variation.
153-
flag_id_map: Dict mapping feature flag key to feature flag object.
154+
variables: List of dicts representing variables on an instance of Variation object.
155+
feature_flag_id_map: Dict mapping feature flag key to feature flag object.
154156
155157
Returns:
156-
Variation object with the feature flag map property computed.
158+
Dict mapping values from feature flag key to value stored on the variation's variable.
157159
"""
158160

159-
for variable in variation.variables:
160-
feature_flag = flag_id_map[variable.get('id')]
161+
feature_flag_value_map = {}
162+
for variable in variables:
163+
feature_flag = feature_flag_id_map[variable.get('id')]
161164
if not feature_flag:
162165
continue
163-
variation.featureFlagMap[feature_flag.key] = self._get_typecast_value(variable.get('value'), feature_flag.type)
166+
feature_flag_value_map[feature_flag.key] = self._get_typecast_value(variable.get('value'), feature_flag.type)
164167

165-
return variation
168+
return feature_flag_value_map
166169

167170
def was_parsing_successful(self):
168171
""" Helper method to determine if parsing the datafile was successful.

tests/test_config.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -505,7 +505,7 @@ def test_init__with_v3_datafile(self):
505505
'28906': entities.Variation('28906', 'group_exp_2_variation')
506506
}
507507
}
508-
expected_flag_id_map = {
508+
expected_feature_flag_id_map = {
509509
'127': entities.FeatureFlag('127', 'is_working', 'boolean', 'true'),
510510
'128': entities.FeatureFlag('128', 'environment', 'string', 'devel'),
511511
'129': entities.FeatureFlag('129', 'number_of_days', 'integer', '192'),
@@ -520,7 +520,7 @@ def test_init__with_v3_datafile(self):
520520
self.assertEqual(expected_audience_id_map, project_config.audience_id_map)
521521
self.assertEqual(expected_variation_key_map, project_config.variation_key_map)
522522
self.assertEqual(expected_variation_id_map, project_config.variation_id_map)
523-
self.assertEqual(expected_flag_id_map, project_config.flag_id_map)
523+
self.assertEqual(expected_feature_flag_id_map, project_config.feature_flag_id_map)
524524

525525
def test_get_version(self):
526526
""" Test that JSON version is retrieved correctly when using get_version. """

0 commit comments

Comments
 (0)