def __init__(self, priority_size=100, priority_init=None, replace=True): # Experience_ID to Priority_ID (the node number in Heap) mapping self.e2p = {} # Priority_ID (the node number in Heap) to Experience_ID mapping self.p2e = {} # If the node should be replaced when inserting self.replace = replace if priority_init is None: self.priority_queue = {} self.size = 0 self.max_size = priority_size else: # not yet tested self.priority_queue = priority_init self.size = len(self.priority_queue) self.max_size = None or self.size # map(func, list) returns a list after applying the function to all the elements # The following is a list of (priority_IDs, experience_IDs) experience_list = list( map(lambda x: self.priority_queue[x], self.priority_queue)) # Create the node_number --> Experience_ID and Experience_ID --> node_number mapping self.p2e = utility.list_to_dict(experience_list) self.e2p = utility.exchange_key_value(self.p2e) for i in range(int(self.size / 2), -1, -1): self.down_heap(i)
def reload(self): # not yet test self.priority_queue = priority_init self.size = len(self.priority_queue) self.max_size = None or self.size experience_list = list( map(lambda x: self.priority_queue[x], self.priority_queue)) self.p2e = utility.list_to_dict(experience_list) self.e2p = utility.exchange_key_value(self.p2e) for i in range(int(self.size / 2), -1, -1): self.down_heap(i)
def _set_mc_objs(self): '''Download all the necessary Mailchimp Object lists.''' def _call(clss, url_fnc): return mc_objs_api_call(clss, url_fnc(self.data_center, self.list_id), self.api_key) self.member_list = _call(Member, get_members_url) self.merge_field_dict = list_to_dict( _call(MergeField, get_merge_fields_url), 'tag') self.interest_category_list = _call(InterestCategory, get_interest_categories_url) self.interest_dict = {} for category in self.interest_category_list: self.interest_dict[category['id']] = mc_objs_api_call( Interest, get_interests_url(self.data_center, self.list_id, category['id']), self.api_key)
def __init__(self, priority_size=100, priority_init=None, replace=True): self.e2p = {} self.p2e = {} self.replace = replace if priority_init is None: self.priority_queue = {} self.size = 0 self.max_size = priority_size else: # not yet test self.priority_queue = priority_init self.size = len(self.priority_queue) self.max_size = None or self.size experience_list = list(map(lambda x: self.priority_queue[x], self.priority_queue)) self.p2e = utility.list_to_dict(experience_list) self.e2p = utility.exchange_key_value(self.p2e) for i in range(int(self.size / 2), -1, -1): self.down_heap(i)
def get_table_dict(self): ''' Return the table as a list of dicts, where "fields" is a dict of fields and each field is represented as a string. ''' self.interest_dict_dict = {} for k, dict_ in self.interest_dict.items(): self.interest_dict_dict[k] = list_to_dict(dict_, 'id') table = [] for member in self.member_list: fields = {} for field in ['email_address', 'status']: fields[field] = member[field] for category in self.interest_category_list: interest_dict = self.interest_dict_dict[category['id']] interest_strings = [] for id_, member_has_interest in member['interests'].items(): if member_has_interest: interest = interest_dict.get(id_) if interest is not None: interest_strings.append(interest['name']) fields[category['title']] = (', ').join(interest_strings) for tag, merge_field in self.merge_field_dict.items(): merge_field_type = merge_field['type'] field_value = member['merge_field_dict'][tag] fields[tag] = get_display_repr(field_value, merge_field_type, self.country_dict) table.append({ 'fields': fields, 'profile_link': self._make_edit_link(member['web_id']), 'id': member['id'] }) return table