@@ -41,7 +41,7 @@ def __init__(self, datafile, logger, error_handler):
4141 self .experiment_key_map = self ._generate_key_map_entity (self .experiments , 'key' , entities .Experiment )
4242 self .event_key_map = self ._generate_key_map_entity (self .events , 'key' , entities .Event )
4343 self .attribute_key_map = self ._generate_key_map_entity (self .attributes , 'key' , entities .Attribute )
44- self .audience_id_map = self ._generate_key_map (self .audiences , 'id' )
44+ self .audience_id_map = self ._generate_key_map_entity (self .audiences , 'id' , entities . Audience )
4545 self .audience_id_map = self ._deserialize_audience (self .audience_id_map )
4646 for group in self .group_id_map .values ():
4747 experiments_in_group_key_map = self ._generate_key_map_entity (group ['experiments' ], 'key' , entities .Experiment )
@@ -84,12 +84,13 @@ def _generate_key_map(list, key):
8484 return key_map
8585
8686 @staticmethod
87- def _generate_key_map_entity (list , key , named_tuple ):
87+ def _generate_key_map_entity (list , key , entity_class ):
8888 """ Helper method to generate map from key to entity object for given list of dicts.
8989
9090 Args:
9191 list: List consisting of dict.
9292 key: Key in each dict which will be key in the map.
93+ entity_class: Class representing the entity.
9394
9495 Returns:
9596 Map mapping key to entity object.
@@ -98,24 +99,27 @@ def _generate_key_map_entity(list, key, named_tuple):
9899 key_map = {}
99100
100101 for obj in list :
101- key_map [obj [key ]] = named_tuple (** obj )
102+ key_map [obj [key ]] = entity_class (** obj )
102103
103104 return key_map
104105
105106 @staticmethod
106107 def _deserialize_audience (audience_map ):
107- """ Helper method to deserialize and populate audience map with the condition list and structure.
108+ """ Helper method to de-serialize and populate audience map with the condition list and structure.
108109
109110 Args:
110111 audience_map: Dict mapping audience ID to audience object.
111112
112113 Returns:
113- Dict additionally consisting of condition list and structure for every audience.
114+ Dict additionally consisting of condition list and structure on every audience object .
114115 """
115116
116- for audience_id in audience_map .keys ():
117- audience_map [audience_id ]['conditionStructure' ], audience_map [audience_id ]['conditionList' ] = \
118- condition_helper .loads (audience_map [audience_id ]['conditions' ])
117+ for audience in audience_map .values ():
118+ condition_structure , condition_list = condition_helper .loads (audience .conditions )
119+ audience .__dict__ .update ({
120+ 'conditionStructure' : condition_structure ,
121+ 'conditionList' : condition_list
122+ })
119123
120124 return audience_map
121125
@@ -184,7 +188,7 @@ def get_experiment_from_id(self, experiment_id):
184188 self .error_handler .handle_error (exceptions .InvalidExperimentException (enums .Errors .INVALID_EXPERIMENT_KEY_ERROR ))
185189 return None
186190
187- def get_audience_object_from_id (self , audience_id ):
191+ def get_audience (self , audience_id ):
188192 """ Get audience object for the provided audience ID.
189193
190194 Args:
@@ -194,7 +198,13 @@ def get_audience_object_from_id(self, audience_id):
194198 Dict representing the audience.
195199 """
196200
197- return self .audience_id_map .get (audience_id )
201+ audience = self .audience_id_map .get (audience_id )
202+
203+ if audience :
204+ return audience
205+
206+ self .logger .log (enums .LogLevels .ERROR , 'Audience ID "%s" is not in datafile.' % audience_id )
207+ self .error_handler .handle_error (exceptions .InvalidAudienceException ((enums .Errors .INVALID_AUDIENCE_ERROR )))
198208
199209 def get_variation_key_from_id (self , experiment_key , variation_id ):
200210 """ Get variation key given experiment key and variation ID.
0 commit comments