Example #1
0
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
Example #2
0
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
Example #3
0
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