def get_surname_from_person(dbase, person): """ get the person's surname get the primary name if group as get the group_as surname else get the primary surname of the primary name and correct for [global] group_as name correct for surnames that are space or None """ primary_name = person.get_primary_name() if primary_name.group_as: surname = primary_name.group_as else: group_map = _nd.primary_surname(primary_name) surname = dbase.get_name_group_mapping(group_map) # Treat people who have no name with those whose name is just # 'whitespace' if surname is None or surname.isspace(): surname = '' return surname
def sort_people(dbase, handle_list, rlocale=glocale): """ will sort the database people by surname """ sname_sub = defaultdict(list) sortnames = {} for person_handle in handle_list: person = dbase.get_person_from_handle(person_handle) primary_name = person.get_primary_name() if primary_name.group_as: surname = primary_name.group_as else: group_map = _nd.primary_surname(primary_name) surname = dbase.get_name_group_mapping(group_map) # Treat people who have no name with those whose name is just # 'whitespace' if surname is None or surname.isspace(): surname = '' sortnames[person_handle] = _nd.sort_string(primary_name) sname_sub[surname].append(person_handle) sorted_lists = [] temp_list = sorted(sname_sub, key=rlocale.sort_key) for name in temp_list: if isinstance(name, bytes): name = name.decode('utf-8') slist = sorted(((sortnames[x], x) for x in sname_sub[name]), key=lambda x: rlocale.sort_key(x[0])) entries = [x[1] for x in slist] sorted_lists.append((name, entries)) return sorted_lists