17
17
from .helpers import enums
18
18
from . import entities
19
19
from . import exceptions
20
+ import copy
20
21
21
22
SUPPORTED_VERSIONS = [
22
23
enums .DatafileVersions .V2 ,
@@ -56,6 +57,7 @@ def __init__(self, datafile, logger, error_handler):
56
57
self .environment_key = config .get ('environmentKey' , None )
57
58
self .groups = config .get ('groups' , [])
58
59
self .experiments = config .get ('experiments' , [])
60
+ self .mapexperiment = copy .deepcopy (self .experiments )
59
61
self .events = config .get ('events' , [])
60
62
self .attributes = config .get ('attributes' , [])
61
63
self .audiences = config .get ('audiences' , [])
@@ -68,6 +70,7 @@ def __init__(self, datafile, logger, error_handler):
68
70
69
71
# Utility maps for quick lookup
70
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 )
71
74
self .experiment_key_map = self ._generate_key_map (self .experiments , 'key' , entities .Experiment )
72
75
self .event_key_map = self ._generate_key_map (self .events , 'key' , entities .Event )
73
76
self .attribute_key_map = self ._generate_key_map (self .attributes , 'key' , entities .Attribute )
@@ -85,18 +88,24 @@ def __init__(self, datafile, logger, error_handler):
85
88
for layer in self .rollout_id_map .values ():
86
89
for experiment in layer .experiments :
87
90
self .experiment_key_map [experiment ['key' ]] = entities .Experiment (** experiment )
91
+ self .experimentID_map [experiment ['id' ]] = entities .Experiment (** experiment )
88
92
89
93
self .audience_id_map = self ._deserialize_audience (self .audience_id_map )
90
94
for group in self .group_id_map .values ():
91
95
experiments_in_group_key_map = self ._generate_key_map (group .experiments , 'key' , entities .Experiment )
92
96
for experiment in experiments_in_group_key_map .values ():
93
97
experiment .__dict__ .update ({'groupId' : group .id , 'groupPolicy' : group .policy })
94
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 )
100
+ for experiment in experiments_in_group_id_map .values ():
101
+ experiment .__dict__ .update ({'groupId' : group .id , 'groupPolicy' : group .policy })
102
+ self .experiment_key_map .update (experiments_in_group_id_map )
95
103
96
104
self .experiment_id_map = {}
97
105
self .variation_key_map = {}
98
106
self .variation_id_map = {}
99
107
self .variation_variable_usage_map = {}
108
+
100
109
for experiment in self .experiment_key_map .values ():
101
110
self .experiment_id_map [experiment .id ] = experiment
102
111
self .variation_key_map [experiment .key ] = self ._generate_key_map (
@@ -108,6 +117,26 @@ def __init__(self, datafile, logger, error_handler):
108
117
self .variation_variable_usage_map [variation .id ] = self ._generate_key_map (
109
118
variation .variables , 'id' , entities .Variation .VariableUsage
110
119
)
120
+ self .correct_variation_id_map = {}
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 (
124
+ experiment .variations , 'id' , entities .Variation
125
+ )
126
+ self .correct_variation_id_map [experiment .id ] = {}
127
+ for variation in self .temp_variation_id_map .get (experiment .id ).values ():
128
+ self .correct_variation_id_map [experiment .id ][variation .id ] = variation
129
+ self .variation_variable_usage_map [variation .id ] = self ._generate_key_map (
130
+ variation .variables , 'id' , entities .Variation .VariableUsage
131
+ )
132
+
133
+
134
+
135
+
136
+
137
+
138
+
139
+
111
140
112
141
self .feature_key_map = self ._generate_key_map (self .feature_flags , 'key' , entities .FeatureFlag )
113
142
@@ -280,8 +309,8 @@ def get_experiment_from_id(self, experiment_id):
280
309 Experiment corresponding to the provided experiment ID.
281
310
"""
282
311
283
- experiment = self .experiment_id_map .get (experiment_id )
284
-
312
+ # experiment = self.experiment_id_map.get(experiment_id)
313
+ experiment = self . experimentID_map . get ( experiment_id )
285
314
if experiment :
286
315
return experiment
287
316
@@ -362,8 +391,8 @@ def get_variation_from_id(self, experiment_key, variation_id):
362
391
Object representing the variation.
363
392
"""
364
393
365
- variation_map = self .variation_id_map .get (experiment_key )
366
-
394
+ # variation_map = self.variation_id_map.get(experiment_key)
395
+ variation_map = self . correct_variation_id_map . get ( experiment_key )
367
396
if variation_map :
368
397
variation = variation_map .get (variation_id )
369
398
if variation :
0 commit comments