Code Search for Developers
 
 
  

rel_pl.py from gramps at Krugle


Show rel_pl.py syntax highlighted

# -*- coding: utf-8 -*-
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2003-2005  Donald N. Allingham
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#

# Written by Piotr Czubaszek, largely based on rel_de.py by Alex Roitman.

#-------------------------------------------------------------------------
#
# GRAMPS modules
#
#-------------------------------------------------------------------------

import RelLib
import Relationship
import types
from gettext import gettext as _
from PluginUtils import register_relcalc

#-------------------------------------------------------------------------
#
# Polish-specific definitions of relationships
#
#-------------------------------------------------------------------------

_father_level = [ "", "ojciec", 
  "dziadek", 
  "pradziadek", 
  "prapradziadek", 
  "praprapradziadek", 
  "prapraprapradziadek",
  "praprapraprapradziadek",
  "prapraprapraprapradziadek",
  "praprapraprapraprapradziadek",
  "prapraprapraprapraprapradziadek",
  "praprapraprapraprapraprapradziadek",
  "prapraprapraprapraprapraprapradziadek",
]

_mother_level = [ "", "matka", 
  "babcia", 
  "prababcia", 
  "praprababcia", 
  "prapraprababcia",
  "praprapraprababcia",
  "prapraprapraprababcia",
  "praprapraprapraprababcia",
  "prapraprapraprapraprababcia",
  "praprapraprapraprapraprababcia",
  "prapraprapraprapraprapraprababcia",
  "praprapraprapraprapraprapraprababcia",
]

_son_level = [ "", "syn", 
  "wnuk",
  "prawnuk",
  "praprawnuk",
  "prapraprauwnuk",
  "praprapraprauwnuk",
  "prapraprapraprawnuk",
  "praprapraprapraprawnuk",
  "prapraprapraprapraprawnuk",
  "praprapraprapraprapraprawnuk",
  "prapraprapraprapraprapraprawnuk",
  "praprapraprapraprapraprapraprawnuk",
]

_daughter_level = [ "", "córka", 
  "wnuczka", 
  "prawnuczka", 
  "praprawnuczka", 
  "prapraprauwnuczka", 
  "praprapraprauwnuczka", 
  "prapraprapraprawnuczka", 
  "praprapraprapraprawnuczka", 
  "prapraprapraprapraprawnuczka", 
  "praprapraprapraprapraprawnuczka", 
  "prapraprapraprapraprapraprawnuczka", 
  "praprapraprapraprapraprapraprawnuczka", 
]

_sister_level_of_male = [ "", "siostra", "ciotka", 
  "babcia stryjeczna", 
  "prababcia stryjeczna", 
  "praprababcia stryjeczna", 
  "prapraprababcia stryjeczna", 
  "praprapraprababcia stryjeczna", 
  "prapraprapraprababcia stryjeczna", 
  "praprapraprapraprababcia stryjeczna", 
  "prapraprapraprapraprababcia stryjeczna", 
  "praprapraprapraprapraprababcia stryjeczna", 
  "prapraprapraprapraprapraprababcia stryjeczna", 
  "praprapraprapraprapraprapraprababcia stryjeczna", 
]

_sister_level_of_female = [ "", "siostra", "ciotka", 
  "babcia cioteczna", 
  "prababcia cioteczna", 
  "praprababcia cioteczna", 
  "prapraprababcia cioteczna", 
  "praprapraprababcia cioteczna", 
  "prapraprapraprababcia cioteczna", 
  "praprapraprapraprababcia cioteczna", 
  "prapraprapraprapraprababcia cioteczna", 
  "praprapraprapraprapraprababcia cioteczna", 
  "prapraprapraprapraprapraprababcia cioteczna", 
  "praprapraprapraprapraprapraprababcia cioteczna", 
]

_brother_level_of_male = [ "", "brat", "stryj", 
  "dziadek stryjeczny", 
  "pradziadek stryjeczny", 
  "prapradziadek stryjeczny",
  "praprapradziadek stryjeczny", 
  "prapraprapradziadek stryjeczny", 
  "praprapraprapradziadek stryjeczny", 
  "prapraprapraprapradziadek stryjeczny", 
  "praprapraprapraprapradziadek stryjeczny", 
  "prapraprapraprapraprapradziadek stryjeczny", 
  "praprapraprapraprapraprapradziadek stryjeczny", 
  "prapraprapraprapraprapraprapradziadek stryjeczny", 
]

_brother_level_of_female = [ "", "brat", "wuj", 
  "dziadek cioteczny", 
  "pradziadek cioteczny", 
  "prapradziadek cioteczny",
  "praprapradziadek cioteczny", 
  "prapraprapradziadek cioteczny", 
  "praprapraprapradziadek cioteczny", 
  "prapraprapraprapradziadek cioteczny", 
  "praprapraprapraprapradziadek cioteczny", 
  "prapraprapraprapraprapradziadek cioteczny", 
  "praprapraprapraprapraprapradziadek cioteczny", 
  "prapraprapraprapraprapraprapradziadek cioteczny", 
]

_nephew_level_of_brothers_son = [ "", "bratanek", 
  "syn bratanka", 
  "wnuk bratanka", 
  "prawnuk bratanka", 
  "praprawnuk bratanka", 
  "prapraprawnuk bratanka", 
  "praprapraprawnuk bratanka", 
  "prapraprapraprawnuk bratanka", 
  "praprapraprapraprawnuk bratanka", 
  "prapraprapraprapraprawnuk bratanka", 
  "praprapraprapraprapraprawnuk bratanka", 
  "prapraprapraprapraprapraprawnuk bratanka", 
]

_nephew_level_of_brothers_daughter = [ "", "bratanek", 
  "syn bratanicy", 
  "wnuk bratanicy", 
  "prawnuk bratanicy", 
  "praprawnuk bratanicy", 
  "prapraprawnuk bratanicy", 
  "praprapraprawnuk bratanicy", 
  "prapraprapraprawnuk bratanicy", 
  "praprapraprapraprawnuk bratanicy", 
  "prapraprapraprapraprawnuk bratanicy", 
  "praprapraprapraprapraprawnuk bratanicy", 
  "prapraprapraprapraprapraprawnuk bratanicy", 
  "praprapraprapraprapraprapraprawnuk bratanicy", 
]

_nephew_level_of_sisters_son = [ "", "siostrzeniec", 
  "syn siostrzeńca", 
  "wnuk siostrzeńca", 
  "prawnuk siostrzeńca", 
  "praprawnuk siostrzeńca", 
  "prapraprawnuk siostrzeńca", 
  "praprapraprawnuk siostrzeńca", 
  "prapraprapraprawnuk siostrzeńca", 
  "praprapraprapraprawnuk siostrzeńca", 
  "prapraprapraprapraprawnuk siostrzeńca", 
  "praprapraprapraprapraprawnuk siostrzeńca", 
  "prapraprapraprapraprapraprawnuk siostrzeńca", 
]

_nephew_level_of_sisters_daughter = [ "", "siostrzeniec", 
  "syn siostrzenicy", 
  "wnuk siostrzenicy", 
  "prawnuk siostrzenicy", 
  "praprawnuk siostrzenicy", 
  "prapraprawnuk siostrzenicy", 
  "praprapraprawnuk siostrzenicy", 
  "prapraprapraprawnuk siostrzenicy", 
  "praprapraprapraprawnuk siostrzenicy", 
  "prapraprapraprapraprawnuk siostrzenicy", 
  "praprapraprapraprapraprawnuk siostrzenicy", 
  "prapraprapraprapraprapraprawnuk siostrzenicy", 
]

_niece_level_of_brothers_son = [ "", "bratanica", 
  "córka bratanka", 
  "wnuczka bratanka", 
  "prawnuczka bratanka", 
  "praprawnuczka bratanka", 
  "prapraprawnuczka bratanka", 
  "praprapraprawnuczka bratanka", 
  "prapraprapraprawnuczka bratanka", 
  "praprapraprapraprawnuczka bratanka", 
  "prapraprapraprapraprawnuczka bratanka", 
  "praprapraprapraprapraprawnuczka bratanka", 
]

_niece_level_of_brothers_daughter = [ "", "bratanica", 
  "córka bratanicy", 
  "wnuczka bratanicy", 
  "prawnuczka bratanicy", 
  "praprawnuczka bratanicy", 
  "prapraprawnuczka bratanicy", 
  "praprapraprawnuczka bratanicy", 
  "prapraprapraprawnuczka bratanicy", 
  "praprapraprapraprawnuczka bratanicy", 
  "prapraprapraprapraprawnuczka bratanicy", 
  "praprapraprapraprapraprawnuczka bratanicy", 
]

_niece_level_of_sisters_son = [ "", "siostrzenica", 
  "córka siostrzeńca", 
  "wnuczka siostrzeńca", 
  "prawnuczka siostrzeńca", 
  "praprawnuczka siostrzeńca", 
  "prapraprawnuczka siostrzeńca", 
  "praprapraprawnuczka siostrzeńca", 
  "prapraprapraprawnuczka siostrzeńca", 
  "praprapraprapraprawnuczka siostrzeńca", 
  "prapraprapraprapraprawnuczka siostrzeńca", 
  "praprapraprapraprapraprawnuczka siostrzeńca", 
]

_niece_level_of_sisters_daughter = [ "", "siostrzenica", 
  "córka siostrzenicy", 
  "wnuczka siostrzenicy", 
  "prawnuczka siostrzenicy", 
  "praprawnuczka siostrzenicy", 
  "prapraprawnuczka siostrzenicy", 
  "praprapraprawnuczka siostrzenicy", 
  "prapraprapraprawnuczka siostrzenicy", 
  "praprapraprapraprawnuczka siostrzenicy", 
  "prapraprapraprapraprawnuczka siostrzenicy", 
  "praprapraprapraprapraprawnuczka siostrzenicy", 
]

#-------------------------------------------------------------------------
#
#
#
#-------------------------------------------------------------------------

class RelationshipCalculator(Relationship.RelationshipCalculator):

    def __init__(self):
        Relationship.RelationshipCalculator.__init__(self)

    # other_level+orig_level=stopień pokrewieństwa (degree of kinship)

    def get_junior_male_cousin_father_uncle(self,other_level,orig_level):
    	if other_level == orig_level == 2:
    	    return "brat stryjeczny"
        else:
            return "daleki kuzyn (%d. stopień pokrewieństwa)" % (other_level+orig_level)

    def get_junior_male_cousin_mother_uncle(self,other_level,orig_level):
    	if other_level == orig_level == 2:
    	    return "brat wujeczny"
        else:
            return "daleki kuzyn (%d. stopień pokrewieństwa)" % (other_level+orig_level)

    def get_junior_male_cousin_aunt(self,other_level,orig_level):
    	if other_level == orig_level == 2:
    	    return "brat cioteczny"
        else:
            return "daleki kuzyn (%d. stopień pokrewieństwa)" % (other_level+orig_level)

    def get_senior_male_cousin_of_male(self,level,orig_level,other_level):
        if level>len(_brother_level_of_male)-1:
            return "daleki pra*dziadek stryjeczny (%d. stopień pokrewieństwa)" %(other_level+orig_level)
        else:
            return "daleki %s (%d. stopień pokrewieństwa)" % (_brother_level_of_male[level],other_level+orig_level)

    def get_senior_male_cousin_of_female(self,level,orig_level,other_level):
        if level>len(_brother_level_of_female)-1:
            return "daleki pra*dziadek cioteczny (%d. stopień pokrewieństwa)" %(other_level+orig_level)
        else:
            return "daleki %s (%d. stopień pokrewieństwa)" % (_brother_level_of_female[level],other_level+orig_level)

    def get_junior_female_cousin_father_uncle(self,other_level,orig_level):
    	if other_level == orig_level == 2:
    	    return "siostra stryjeczna"
        else:
            return "daleka kuzynka (%d. stopień pokrewieństwa)" % (other_level+orig_level)

    def get_junior_female_cousin_mother_uncle(self,other_level,orig_level):
    	if other_level == orig_level == 2:
    	    return "siostra wujeczna"
        else:
            return "daleka kuzynka (%d. stopień pokrewieństwa)" % (other_level+orig_level)

    def get_junior_female_cousin_aunt(self,other_level,orig_level):
    	if other_level == orig_level == 2:
    	    return "siostra cioteczna"
        else:
            return "daleka kuzynka (%d. stopień pokrewieństwa)" % (other_level+orig_level)

    def get_senior_female_cousin_of_male(self,level,orig_level,other_level):
        if level>len(_sister_level_of_male)-1:
            return "daleka pra*babcia stryjeczna (%d. stopień pokrewieństwa)" %(other_level+orig_level)
        else:
            return "daleka %s (%d. stopień pokrewieństwa)" % (_sister_level_of_male[level],other_level+orig_level)

    def get_senior_female_cousin_of_female(self,level,orig_level,other_level):
        if level>len(_sister_level_of_female)-1:
            return "daleka pra*babcia cioteczna (%d. stopień pokrewieństwa)" %(other_level+orig_level)
        else:
            return "daleka %s (%d. stopień pokrewieństwa)" % (_sister_level_of_female[level],other_level+orig_level)

    def get_father(self,other_level,orig_level):
        level=other_level
        if level>len(_father_level)-1:
            return "oddalony pra*dziadek (%d. stopień pokrewieństwa)" %(other_level+orig_level)
        else:
            return _father_level[level]

    def get_son(self,other_level,orig_level):
        level=orig_level
        if level>len(_son_level)-1:
            return "oddalony pra*wnuk (%d. stopień pokrewieństwa)" %(other_level+orig_level)
        else:
            return _son_level[level]

    def get_mother(self,other_level,orig_level):
        level=other_level
    	if level>len(_mother_level)-1:
            return "oddalona pra*babcia (%d. stopień pokrewieństwa)" %(other_level+orig_level)
        else:
            return _mother_level[level]

    def get_daughter(self,other_level,orig_level):
        level=orig_level
    	if level>len(_daughter_level)-1:
            return "oddalona pra*wnuczka (%d. stopień pokrewieństwa)" %(other_level+orig_level)
        else:
            return _daughter_level[level]

    def get_aunt_of_male(self,other_level,orig_level):
        level=other_level
        if level>len(_sister_level_of_male)-1:
            return "oddalona pra*babcia stryjeczna (%d. stopień pokrewieństwa)" %(other_level+orig_level)
        else:
            return _sister_level_of_male[level]

    def get_aunt_of_female(self,other_level,orig_level):
        level=other_level
        if level>len(_sister_level_of_female)-1:
            return "oddalona pra*babcia cioteczna (%d. stopień pokrewieństwa)" %(other_level+orig_level)
        else:
            return _sister_level_of_female[level]

    def get_uncle_of_male(self,other_level,orig_level):
        level=other_level
        if level>len(_brother_level_of_male)-1:
            return "oddalony pra*dziadek stryjeczny (%d. stopień pokrewieństwa)" %(other_level+orig_level)
        else:
            return _brother_level_of_male[level]

    def get_uncle_of_female(self,other_level,orig_level):
        level=other_level
        if level>len(_brother_level_of_female)-1:
            return "oddalony pra*dziadek cioteczny (%d. stopień pokrewieństwa)" %(other_level+orig_level)
        else:
            return _brother_level_of_female[level]

    def get_nephew_of_brothers_son(self,other_level,orig_level):
    	level=orig_level-1
        if level>len(_nephew_level_of_brothers_son)-1:
            return "oddalony pra*wnuk bratanka (%d. stopień pokrewieństwa)" %(other_level+orig_level)
        else:
    		return _nephew_level_of_brothers_son[level]

    def get_nephew_of_brothers_daughter(self,other_level,orig_level):
    	level=orig_level-1
        if level>len(_nephew_level_of_brothers_daughter)-1:
            return "oddalony pra*wnuk bratanicy (%d. stopień pokrewieństwa)" %(other_level+orig_level)
        else:
    		return _nephew_level_of_brothers_daughter[level]

    def get_nephew_of_sisters_son(self,other_level,orig_level):
    	level=orig_level-1
        if level>len(_nephew_level_of_sisters_son)-1:
            return "oddalony pra*wnuk siostrzeńca (%d. stopień pokrewieństwa)" %(other_level+orig_level)
        else:
    		return _nephew_level_of_sisters_son[level]

    def get_nephew_of_sisters_daughter(self,other_level,orig_level):
    	level=orig_level-1
        if level>len(_nephew_level_of_sisters_daughter)-1:
            return "oddalony pra*wnuk siostrzenicy (%d. stopień pokrewieństwa)" %(other_level+orig_level)
        else:
    		return _nephew_level_of_sisters_daughter[level]

    def get_niece_of_brothers_son(self,other_level,orig_level):
    	level=orig_level-1
        if level>len(_niece_level_of_brothers_son)-1:
            return "oddalona pra*wnuczka bratanka (%d. stopień pokrewieństwa)" %(other_level+orig_level)
        else:
            return _niece_level_of_brothers_son[level]

    def get_niece_of_brothers_daughter(self,other_level,orig_level):
    	level=orig_level-1
        if level>len(_niece_level_of_brothers_daughter)-1:
            return "oddalona pra*wnuczka bratanicy (%d. stopień pokrewieństwa)" %(other_level+orig_level)
        else:
            return _niece_level_of_brothers_daughter[level]

    def get_niece_of_sisters_son(self,other_level,orig_level):
    	level=orig_level-1
        if level>len(_niece_level_of_sisters_son)-1:
            return "oddalona pra*wnuczka siostrzeńca (%d. stopień pokrewieństwa)" %(other_level+orig_level)
        else:
            return _niece_level_of_sisters_son[level]

    def get_niece_of_sisters_daughter(self,other_level,orig_level):
    	level=orig_level-1
        if level>len(_niece_level_of_sisters_daughter)-1:
            return "oddalona pra*wnuczka siostrzenicy (%d. stopień pokrewieństwa)" %(other_level+orig_level)
        else:
            return _niece_level_of_sisters_daughter[level]

    def get_relationship_distance(self,db,orig_person,other_person):
        """
        Returns a tuple (firstRel,secondRel,common):
        
        firstRel    Number of generations from the orig_person to their
                    closest common ancestor
        secondRel   Number of generations from the other_person to their
                    closest common ancestor
        common      list of their common ancestors, the closest is the first
        
        is returned
        """
        
        firstRel = -1
        secondRel = -1
        common = []

        firstMap = {}
        firstList = []
        secondMap = {}
        secondList = []
        rank = 9999999

        try:
            self.__apply_filter(db,orig_person,'',firstList,firstMap)
            self.__apply_filter(db,other_person,'',secondList,secondMap)
        except RuntimeError:
            return (firstRel,secondRel,_("Relationship loop detected"))

        for person_handle in firstList:
            if person_handle in secondList:
                new_rank = len(firstMap[person_handle])
                if new_rank < rank:
                    rank = new_rank
                    common = [ person_handle ]
                elif new_rank == rank:
                    common.append(person_handle)

        if common:
            person_handle = common[0]
            secondRel = firstMap[person_handle]
            firstRel = secondMap[person_handle]

        return (firstRel,secondRel,common,firstList,secondList)

    def get_relationship(self,db,orig_person,other_person):
        """
        Returns a string representing the relationshp between the two people,
        along with a list of common ancestors (typically father,mother) 
        
        Special cases: relation strings "", "undefined" and "spouse".
        """

        if orig_person == None:
            return ("undefined",[])
    
        if orig_person.get_handle() == other_person.get_handle():
            return ('', [])

        is_spouse = self.is_spouse(db,orig_person,other_person)
        if is_spouse:
            return (is_spouse,[])

        (firstRel,secondRel,common,firstList,secondList) = \
                     self.get_relationship_distance(db,orig_person,other_person)
        
        if type(common) == types.StringType or \
           type(common) == types.UnicodeType:
            return (common,[])
        elif common:
            person_handle = common[0]
        else:
            return ("",[])

        firstRel = len(firstRel)
        secondRelatives = secondRel
        secondRel = len(secondRel)

        if firstRel == 0:
            if secondRel == 0:
                return ('',common)
            elif other_person.get_gender() == RelLib.Person.MALE:
                return (self.get_father(secondRel,firstRel),common)
            else:
                return (self.get_mother(secondRel,firstRel),common)
        elif secondRel == 0:
            if other_person.get_gender() == RelLib.Person.MALE:
                return (self.get_son(secondRel,firstRel),common)
            else:
                return (self.get_daughter(secondRel,firstRel),common)
        elif firstRel == 1:
            families1 = db.get_person_from_handle(common[0]).get_family_handle_list()
            families2 = None
            if len(common) >1:
                families2 = db.get_person_from_handle(common[1]).get_family_handle_list()
            for ancFamily_handle in families1:
                if families2:
                    if ancFamily_handle in families2:
                        ancFamily = db.get_family_from_handle(ancFamily_handle)
                    else:
                        continue
                else:
                    ancFamily = db.get_family_from_handle(ancFamily_handle)
                children = ancFamily.get_child_ref_list()
                for sibling in children:
                    if sibling.ref in firstList:
                        # discriminate between siblings/uncles etc. and stepsiblings/stepuncles etc.
                        if other_person.get_main_parents_family_handle() == db.get_person_from_handle(sibling.ref).get_main_parents_family_handle():
                            if other_person.get_gender() == RelLib.Person.MALE:
                                if db.get_person_from_handle(sibling.ref).get_gender() == RelLib.Person.MALE:
                                    # brat / stryj / (pra)dziadek stryjeczny
                                    return (self.get_uncle_of_male(secondRel,firstRel),common)
                                else:
                                    # brat / wuj / (pra)dziadek cioteczny
                                    return (self.get_uncle_of_female(secondRel,firstRel),common)
                            else:
                                if db.get_person_from_handle(sibling.ref).get_gender() == RelLib.Person.MALE:
                                    # siostra / ciotka / (pra)babcia stryjeczna
                                    return (self.get_aunt_of_male(secondRel,firstRel),common)
                                else:
                                    # siostra / ciotka / (pra)babcia cioteczna
                                    return (self.get_aunt_of_female(secondRel,firstRel),common)
                        else:
                            if other_person.get_gender() == RelLib.Person.MALE:
                                if db.get_person_from_handle(sibling.ref).get_gender() == RelLib.Person.MALE:
                                    # brat / stryj / (pra)dziadek stryjeczny
                                    return (self.get_uncle_of_male(secondRel,firstRel)+" (przyrodni)",common)
                                else:
                                    # brat / wuj / (pra)dziadek cioteczny
                                    return (self.get_uncle_of_female(secondRel,firstRel)+" (przyrodni)",common)
                            else:
                                if db.get_person_from_handle(sibling.ref).get_gender() == RelLib.Person.MALE:
                                    # siostra / ciotka / (pra)babcia stryjeczna
                                    return (self.get_aunt_of_male(secondRel,firstRel)+" (przyrodnia)",common)
                                else:
                                    # siostra / ciotka / (pra)babcia cioteczna
                                    return (self.get_aunt_of_female(secondRel,firstRel)+" (przyrodnia)",common)
        elif secondRel == 1:
            families1 = db.get_person_from_handle(common[0]).get_family_handle_list()
            families2 = None
            if len(common) >1:
                families2 = db.get_person_from_handle(common[1]).get_family_handle_list()
            for ancFamily_handle in families1:
                if families2:
                    if ancFamily_handle in families2:
                        ancFamily = db.get_family_from_handle(ancFamily_handle)
                    else:
                        continue
                else:
                    ancFamily = db.get_family_from_handle(ancFamily_handle)
                children = ancFamily.get_child_ref_list()
                for sibling_handle in children:
                    if sibling_handle.ref in secondList:
                        sibling = db.get_person_from_handle(sibling_handle.ref)
                        families = sibling.get_family_handle_list()
                        for sibFamily in families:
                            for child_handle in db.get_family_from_handle(sibFamily).get_child_ref_list():
                                if child_handle.ref in secondList:
                                    child = db.get_person_from_handle(child_handle.ref)
                                    if other_person.get_gender() == RelLib.Person.MALE:
                                        if sibling.get_gender() == RelLib.Person.MALE:
                                            if child.get_gender() == RelLib.Person.MALE:
                                                # bratanek / syn bratanka
                                                return (self.get_nephew_of_brothers_son(secondRel,firstRel),common)
                                            else:
                                                # bratanek / syn bratanicy
                                                return (self.get_nephew_of_brothers_daughter(secondRel,firstRel),common)
                                        else:
                                            if child.get_gender() == RelLib.Person.MALE:
                                                # siostrzeniec / syn siostrzeńca
                                                return (self.get_nephew_of_sisters_son(secondRel,firstRel),common)
                                            else:
                                                # siostrzniec / syn siostrzenicy
                                                return (self.get_nephew_of_sisters_daughter(secondRel,firstRel),common)
                                    else:
                                        if sibling.get_gender() == RelLib.Person.MALE:
                                            if child.get_gender() == RelLib.Person.MALE:
                                                # bratanica / córka bratanka
                                                return (self.get_niece_of_brothers_son(secondRel,firstRel),common)
                                            else:
                                                # bratanica / córka bratanicy
                                                return (self.get_niece_of_brothers_daughter(secondRel,firstRel),common)
                                        else:
                                            if child.get_gender() == RelLib.Person.MALE:
                                                # siostrzenica / córka siostrzeńca
                                                return (self.get_niece_of_sisters_son(secondRel,firstRel),common)
                                            else:
                                                # siostrzenica / córka siostrzenicy
                                                return (self.get_niece_of_sisters_daughter(secondRel,firstRel),common)
        elif secondRel > firstRel:
            families1 = db.get_person_from_handle(common[0]).get_family_handle_list()
            families2 = None
            if len(common) >1:
                families2 = db.get_person_from_handle(common[1]).get_family_handle_list()
            for ancFamily_handle in families1:
                if families2:
                    if ancFamily_handle in families2:
                        ancFamily = db.get_family_from_handle(ancFamily_handle)
                    else:
                        continue
                else:
                    ancFamily = db.get_family_from_handle(ancFamily_handle)
                children = ancFamily.get_child_ref_list()
                for sibling in children:
                    if sibling.ref in firstList:
                        if other_person.get_gender() == RelLib.Person.MALE:
                            if db.get_person_from_handle(sibling.ref).get_gender() == RelLib.Person.MALE:
                                return (self.get_senior_male_cousin_of_male(secondRel-firstRel+1,firstRel,secondRel),common)
                            else:
                                return (self.get_senior_male_cousin_of_female(secondRel-firstRel+1,firstRel,secondRel),common)
                        else:
                            if db.get_person_from_handle(sibling.ref).get_gender() == RelLib.Person.MALE:
                                return (self.get_senior_female_cousin_of_male(secondRel-firstRel+1,firstRel,secondRel),common)
                            else:
                                return (self.get_senior_female_cousin_of_female(secondRel-firstRel+1,firstRel,secondRel),common)
        else:
    	    families1 = db.get_person_from_handle(common[0]).get_family_handle_list()
            families2 = None
            if len(common) >1:
                families2 = db.get_person_from_handle(common[1]).get_family_handle_list()
            for ancFamily_handle in families1:
                if families2:
                    if ancFamily_handle in families2:
                        ancFamily = db.get_family_from_handle(ancFamily_handle)
                    else:
                        continue
                else:
                    ancFamily = db.get_family_from_handle(ancFamily_handle)
                
                children = ancFamily.get_child_ref_list()    		
                for sibling_handle in children:
                    if sibling_handle.ref in firstList:
        			    for other_sibling_handle in children:
        				    if other_sibling_handle.ref in secondList:
            					sibling = db.get_person_from_handle(sibling_handle.ref)
            					other_sibling = db.get_person_from_handle(other_sibling_handle.ref)
            					if other_person.get_gender() == RelLib.Person.MALE:
            						if other_sibling.get_gender() == RelLib.Person.MALE:
            							if sibling.get_gender() == RelLib.Person.MALE:
            								# brat stryjeczny
            								return (self.get_junior_male_cousin_father_uncle(secondRel,firstRel),common)
            							else:
            								# brat wujeczny
            								return (self.get_junior_male_cousin_mother_uncle(secondRel,firstRel),common)
            						else:
            							# brat cioteczny
            							return (self.get_junior_male_cousin_aunt(secondRel,firstRel),common)
            					else:
            						if other_sibling.get_gender() == RelLib.Person.MALE:
            							if sibling.get_gender() == RelLib.Person.MALE:
            								# siostra stryjeczna
            								return (self.get_junior_female_cousin_father_uncle(secondRel,firstRel),common)
            							else:
            								# siostra wujeczna
            								return (self.get_junior_female_cousin_mother_uncle(secondRel,firstRel),common)
            						else:
            							# siostra cioteczna
            							return (self.get_junior_female_cousin_aunt(secondRel,firstRel),common)
    
#-------------------------------------------------------------------------
#
# Register this class with the Plugins system 
#
#-------------------------------------------------------------------------
register_relcalc(RelationshipCalculator,
    ["pl","PL","pl_PL","polski","Polski","pl_PL.UTF-8", "pl_PL.UTF8", "pl_PL.utf-8", "pl_PL.utf8", "pl_PL.iso-8859-2", "pl_PL.iso8859-2", "pl_PL.cp1250", "pl_PL.cp-1250"])
    



See more files for this project here

gramps

GRAMPS is a GNOME genealogy program for Linux and FreeBSD that allows you to easily build\r\nand keep track of your family tree.

Project homepage: http://sourceforge.net/projects/gramps
Programming language(s): Python
License: other

  AncestorChart.py
  AncestorReport.py
  Ancestors.py
  BookReport.py
  Calendar.py
  ChangeNames.py
  ChangeTypes.py
  Check.py
  Checkpoint.py
  CmdRef.py
  CountAncestors.py
  CustomBookText.py
  DesGraph.py
  Desbrowser.py
  DescendChart.py
  DescendReport.py
  DetAncestralReport.py
  DetDescendantReport.py
  DumpGenderStats.py
  EndOfLineReport.py
  Eval.py
  EventCmp.py
  EventNames.py
  ExportCSV.py
  ExportVCalendar.py
  ExportVCard.py
  ExtractCity.py
  FamilyGroup.py
  FamilyLines.py
  FanChart.py
  FindDupes.py
  FtmStyleAncestors.py
  FtmStyleDescendants.py
  GraphViz.py
  ImportCSV.py
  ImportGeneWeb.py
  ImportvCard.py
  IndivComplete.py
  IndivSummary.py
  KinshipReport.py
  Leak.py
  Makefile.am
  MarkerReport.py
  MediaManager.py
  NarrativeWeb.py
  OwnerEditor.py
  PHPGedViewConnector.py
  PatchNames.py
  ReadGrdb.py
  ReadPkg.py
  Rebuild.py
  RebuildRefMap.py
  RelCalc.py
  RemoveUnused.py
  ReorderIds.py
  SimpleBookTitle.py
  SoundGen.py
  StatisticsChart.py
  Summary.py
  TestcaseGenerator.py
  TimeLine.py
  Verify.py
  WebCal.py
  WriteCD.py
  WriteFtree.py
  WriteGeneWeb.py
  WritePkg.py
  all_events.py
  book.glade
  cdexport.glade
  changenames.glade
  changetype.glade
  checkpoint.glade
  csvexport.glade
  desbrowse.glade
  eval.glade
  eventcmp.glade
  genewebexport.glade
  holidays.xml
  leak.glade
  merge.glade
  ownereditor.glade
  patchnames.glade
  phpgedview.glade
  rel_cs.py
  rel_da.py
  rel_de.py
  rel_es.py
  rel_fi.py
  rel_fr.py
  rel_hu.py
  rel_it.py
  rel_nl.py
  rel_no.py
  rel_pl.py
  rel_ru.py
  rel_sk.py
  rel_sv.py
  relcalc.glade
  siblings.py
  soundex.glade
  summary.glade
  unused.glade
  vcalendarexport.glade
  vcardexport.glade
  verify.glade
  writeftree.glade