def load_from_string(self, json_string): model_manager = ModelManager() groups = {} individuals = {} j = json.loads(json_string) if j: # load groups if 'groups' in j: if len(j['groups']): for group_id, g_v in j['groups'].iteritems(): group = Group(str(group_id)) group.max_size = g_v['max'] groups[str(group_id)] = group else: raise Exception("Invalid JSON string for preference input. Must have at least one group defined in 'groups' dictionary.") else: raise Exception("Invalid JSON string for preference input. Must have 'groups' dictionary.") # load individuals if 'individuals' in j: if len(j['individuals']): for individual_id, i_v in j['individuals'].iteritems(): individual = Individual(str(individual_id)) for group_id, group_pref_value in i_v['prefs'].iteritems(): individual.set_group_pref_value(str(group_id), float(group_pref_value)) individuals[str(individual_id)] = individual else: raise Exception("Invalid JSON string for preference input. Must have at least one group defined in 'individuals' dictionary.") else: raise Exception("Invalid JSON string for preference input. Must have 'individuals' dictionary.") model_manager.individuals = individuals model_manager.groups = groups return model_manager
def _get_individuals_from_csv_dict_reader(self, reader): individuals = {} row_num = 0 for row in reader: row_num += 1 # lowercase and strip column names row = dict((k.lower().strip(), v) for k,v in row.iteritems()) field_names = self._get_field_names_from_csv_dict_reader(reader) individual_id = str(row['individual_id']) if individual_id is None: raise Exception('Invalid CSV preference file. On row number ' + str(row_num) + ', missing individual_id') elif individual_id in individuals: raise Exception('Invalid CSV preference file. On row number ' + str(row_num) + ', duplicate individual_id: ' + individual_id) i_k = str(individual_id) individual = Individual(individual_id) for field_name in field_names: if field_name != 'individual_id': (group_id, group_max_size) = self._parse_csv_group_field_name(field_name) group_pref_value = float(row[field_name]) individual.set_group_pref_value(str(group_id), float(group_pref_value)) individuals[str(individual.id)] = individual return individuals