Example #1
0
def parse_individual(element: IndividualElement, tree):
    child = Person()

    # get names from element
    names = list(get_names(element))

    # save legal name
    # assumes first name in list is primary name
    legal_name = LegalName()
    parse_name_dict(names[0], legal_name)
    legal_name.tree = tree
    legal_name.save()
    child.legal_name = legal_name

    # save alternate names
    for name_dict in names[1:]:
        alternate_name = AlternateName()
        parse_name_dict(name_dict, alternate_name)
        alternate_name.person = child
        alternate_name.tree = tree
        alternate_name.save()

    child.gender = parse_gender(get_value(element, tags.GEDCOM_TAG_SEX))

    # Is saving related models necessary, or will it cascade?
    birth_event_element = get_next_child_element(element,
                                                 tags.GEDCOM_TAG_BIRTH)
    if birth_event_element:
        child.birth_date = parse_event_date(birth_event_element)
        child.birth_location = parse_event_location(birth_event_element)

    death_event_element = get_next_child_element(element,
                                                 tags.GEDCOM_TAG_DEATH)
    if death_event_element:
        child.death_date = parse_event_date(death_event_element)
        child.death_location = parse_event_location(death_event_element)
        child.living = 'Dead'

    # living defaults to Unknown; change to living = has birth year and not has death year?

    child.tree = tree

    child.save()

    return element.get_pointer(), child