svn: r13975
This commit is contained in:
Jérôme Rapinat 2010-01-05 18:07:09 +00:00
parent 57ac58b67e
commit 9ae34b4ba8
2 changed files with 82 additions and 75 deletions

View File

@ -19,7 +19,9 @@
#
# $Id:Relationship.py 9912 2008-01-22 09:17:46Z acraphae $
"""
Classes for relationships.
"""
#-------------------------------------------------------------------------
#
# python modules
@ -791,7 +793,7 @@ class RelationshipCalculator(object):
self.__apply_filter(db, other_person, '', [], secondMap,
stoprecursemap = firstMap)
except RuntimeError:
return (-1,None,-1,[],-1,[] ) , \
return (-1, None, -1, [], -1, []) , \
[_("Relationship loop detected")] + self.__msg
if self.storemap:
@ -815,8 +817,8 @@ class RelationshipCalculator(object):
#insert common ancestor in correct position,
# if shorter links, check if not subset
# if longer links, check if not superset
pos=0
for ranknew, handlenew,rel1new,fam1new,rel2new,fam2new in com :
pos = 0
for ranknew, handlenew, rel1new, fam1new, rel2new, fam2new in com :
insert = True
for rank, handle, rel1, fam1, rel2, fam2 in common :
if ranknew < rank :
@ -832,14 +834,14 @@ class RelationshipCalculator(object):
if insert :
if common :
common.insert(pos, (ranknew, handlenew,
rel1new, fam1new,rel2new,fam2new))
rel1new, fam1new, rel2new, fam2new))
else:
common = [(ranknew, handlenew,
rel1new, fam1new, rel2new, fam2new)]
#now check if superset must be deleted from common
deletelist=[]
deletelist = []
index = pos+1
for rank, handle,rel1,fam1,rel2,fam2 in common[pos+1:]:
for rank, handle, rel1, fam1, rel2, fam2 in common[pos+1:]:
if rel1new == rel1[:len(rel1new)] and \
rel2new == rel2[:len(rel2new)] :
deletelist.append(index)
@ -860,16 +862,16 @@ class RelationshipCalculator(object):
firstFam = common[0][3]
secondRel = common[0][4]
secondFam = common[0][5]
return (rank,person_handle,firstRel,firstFam,secondRel,secondFam),\
return (rank, person_handle, firstRel, firstFam, secondRel, secondFam),\
self.__msg
if common :
#list with tuples (rank, handle person,rel_str_orig,rel_fam_orig,
# rel_str_other,rel_fam_str) and messages
return common, self.__msg
if not self.__all_dist :
return (-1,None,'',[],'',[]), self.__msg
return (-1, None, '', [], '', []), self.__msg
else :
return [(-1,None,'',[],'',[])], self.__msg
return [(-1, None, '', [], '', [])], self.__msg
def __apply_filter(self, db, person, rel_str, rel_fam, pmap,
depth=1, stoprecursemap=None):
@ -927,7 +929,7 @@ class RelationshipCalculator(object):
rel2[len(rel1):])]
return
elif store:
pmap[person.handle] = [[rel_str],[rel_fam]]
pmap[person.handle] = [[rel_str], [rel_fam]]
#having added person to the pmap, we only look up recursively to
# parents if this person is not common relative
@ -999,7 +1001,7 @@ class RelationshipCalculator(object):
pmap[chandle][1] += [rel_fam_new]
#person is already a grandparent in another branch
else:
pmap[chandle] = [[rel_str+addstr],[rel_fam_new]]
pmap[chandle] = [[rel_str+addstr], [rel_fam_new]]
fam += 1
for handle, data in parentstodo.iteritems():
@ -1899,7 +1901,7 @@ def _test(rc, onlybirth, inlawa, inlawb, printrelstr):
print rel
print '\n\ntesting nieces\n'
sys.stdin.readline()
for i in range(1,MAX) :
for i in range(1, MAX) :
relstr = _rand_relstr(i,'m')
rel = FMT % rc.get_single_relationship_string(1, i,
gen.lib.Person.FEMALE,
@ -1913,7 +1915,7 @@ def _test(rc, onlybirth, inlawa, inlawb, printrelstr):
print rel
print '\n\ntesting nephews\n'
sys.stdin.readline()
for i in range(1,MAX) :
for i in range(1, MAX) :
relstr = _rand_relstr(i,'f')
rel = FMT % rc.get_single_relationship_string(1, i,
gen.lib.Person.FEMALE,
@ -1927,7 +1929,7 @@ def _test(rc, onlybirth, inlawa, inlawb, printrelstr):
print rel
print '\n\ntesting unknown nephews/nieces\n'
sys.stdin.readline()
for i in range(1,MAX) :
for i in range(1, MAX) :
relstr = _rand_relstr(i,'f')
rel = FMT % rc.get_single_relationship_string(1, i,
gen.lib.Person.FEMALE,
@ -1941,7 +1943,7 @@ def _test(rc, onlybirth, inlawa, inlawb, printrelstr):
print rel
print '\n\ntesting uncles\n'
sys.stdin.readline()
for i in range(1,MAX) :
for i in range(1, MAX) :
relstr = _rand_relstr(i,'f')
rel = FMT % rc.get_single_relationship_string(i, 1,
gen.lib.Person.FEMALE,
@ -1955,7 +1957,7 @@ def _test(rc, onlybirth, inlawa, inlawb, printrelstr):
print rel
print '\n\ntesting aunts\n'
sys.stdin.readline()
for i in range(1,MAX) :
for i in range(1, MAX) :
relstr = _rand_relstr(i,'f')
rel = FMT % rc.get_single_relationship_string(i, 1,
gen.lib.Person.MALE,
@ -1969,7 +1971,7 @@ def _test(rc, onlybirth, inlawa, inlawb, printrelstr):
print rel
print '\n\ntesting unknown uncles/aunts\n'
sys.stdin.readline()
for i in range(1,MAX) :
for i in range(1, MAX) :
relstr = _rand_relstr(i,'m')
rel = FMT % rc.get_single_relationship_string(i, 1,
gen.lib.Person.MALE,
@ -1983,7 +1985,7 @@ def _test(rc, onlybirth, inlawa, inlawb, printrelstr):
print rel
print '\n\ntesting male cousins same generation\n'
sys.stdin.readline()
for i in range(1,MAX) :
for i in range(1, MAX) :
relstra = _rand_relstr(i,'f')
relstrb = _rand_relstr(i,'f')
rel = FMT % rc.get_single_relationship_string(i, i,
@ -1999,7 +2001,7 @@ def _test(rc, onlybirth, inlawa, inlawb, printrelstr):
print rel
print '\n\ntesting female cousins same generation\n'
sys.stdin.readline()
for i in range(1,MAX) :
for i in range(1, MAX) :
relstra = _rand_relstr(i,'m')
relstrb = _rand_relstr(i,'m')
rel = FMT % rc.get_single_relationship_string(i, i,
@ -2015,7 +2017,7 @@ def _test(rc, onlybirth, inlawa, inlawb, printrelstr):
print rel
print '\n\ntesting unknown cousins same generation\n'
sys.stdin.readline()
for i in range(1,MAX) :
for i in range(1, MAX) :
relstra = _rand_relstr(i,'m')
relstrb = _rand_relstr(i,'m')
rel = FMT % rc.get_single_relationship_string(i, i,
@ -2033,8 +2035,8 @@ def _test(rc, onlybirth, inlawa, inlawb, printrelstr):
sys.stdin.readline()
import random
random.seed()
for i in range(1,MAX) :
for j in range (i,MAX) :
for i in range(1, MAX) :
for j in range (i, MAX) :
rnd = random.randint(0, 100)
if rnd < 10 :
relstra = _rand_relstr(j,'f')
@ -2065,8 +2067,8 @@ def _test(rc, onlybirth, inlawa, inlawb, printrelstr):
print rel
print '\n\ntesting some cousins down\n'
sys.stdin.readline()
for i in range(1,MAX) :
for j in range (i,MAX) :
for i in range(1, MAX) :
for j in range (i, MAX) :
rnd = random.randint(0, 100)
if rnd < 10 :
relstra = _rand_relstr(i,'f')

View File

@ -23,7 +23,9 @@
# $Id:rel_cs.py 9912 2008-01-22 09:17:46Z acraphae $
# Czech terms added by Zdeněk Hataš. Based on rel_sk.py by Lubo Vasko
"""
Czech-specific classes for relationships.
"""
#-------------------------------------------------------------------------
#
# GRAMPS modules
@ -71,77 +73,80 @@ _niece_level = [ "", "neteř", "praneteř", "prapraneteř", ]
#
#-------------------------------------------------------------------------
class RelationshipCalculator(Relationship.RelationshipCalculator):
"""
RelationshipCalculator Class
"""
def __init__(self):
Relationship.RelationshipCalculator.__init__(self)
def get_male_cousin(self,level):
if level>len(_level_name)-1:
def get_male_cousin(self, level):
if level > len(_level_name)-1:
return "vzdálený příbuzný"
else:
return "bratranec %s stupně" % (_level_name[level])
def get_female_cousin(self,level):
if level>len(_level_name)-1:
def get_female_cousin(self, level):
if level > len(_level_name)-1:
return "vzdálená příbuzná"
else:
return "sestřenice %s stupně" % (_level_name[level])
def get_parents(self,level):
if level>len(_parents_level)-1:
def get_parents(self, level):
if level > len(_parents_level)-1:
return "vzdáleení příbuzní"
else:
return _parents_level[level]
def get_father(self,level):
if level>len(_father_level)-1:
def get_father(self, level):
if level > len(_father_level)-1:
return "vzdálený příbuzný"
else:
return _father_level[level]
def get_son(self,level):
if level>len(_son_level)-1:
def get_son(self, level):
if level > len(_son_level)-1:
return "vzdálený potomek"
else:
return _son_level[level]
def get_mother(self,level):
if level>len(_mother_level)-1:
def get_mother(self, level):
if level > len(_mother_level)-1:
return "vzdálený předek"
else:
return _mother_level[level]
def get_daughter(self,level):
if level>len(_daughter_level)-1:
def get_daughter(self, level):
if level > len(_daughter_level)-1:
return "vzdálený potomek"
else:
return _daughter_level[level]
def get_aunt(self,level):
if level>len(_sister_level)-1:
def get_aunt(self, level):
if level > len(_sister_level)-1:
return "vzdálený předek"
else:
return _sister_level[level]
def get_uncle(self,level):
if level>len(_brother_level)-1:
def get_uncle(self, level):
if level > len(_brother_level)-1:
return "vzdálený předek"
else:
return _brother_level[level]
def get_nephew(self,level):
if level>len(_nephew_level)-1:
def get_nephew(self, level):
if level > len(_nephew_level)-1:
return "vzdálený potomek"
else:
return _nephew_level[level]
def get_niece(self,level):
if level>len(_niece_level)-1:
def get_niece(self, level):
if level > len(_niece_level)-1:
return "vzdálený potomek"
else:
return _niece_level[level]
def get_relationship(self,db, orig_person, other_person):
def get_relationship(self, db, orig_person, other_person):
"""
Return a string representing the relationshp between the two people,
along with a list of common ancestors (typically father,mother)
@ -150,75 +155,75 @@ class RelationshipCalculator(Relationship.RelationshipCalculator):
"""
if orig_person is None:
return ("undefined",[])
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,[])
return (is_spouse, [])
#get_relationship_distance changed, first data is relation to
#orig person, apperently secondRel in this function
(secondRel,firstRel,common) = \
(secondRel, firstRel, common) = \
self.get_relationship_distance(db, orig_person, other_person)
if isinstance(common, basestring):
return (common,[])
return (common, [])
elif common:
person_handle = common[0]
else:
return ("",[])
return ("", [])
firstRel = len(firstRel)
secondRel = len(secondRel)
if firstRel == 0:
if secondRel == 0:
return ('',common)
return ('', common)
elif other_person.get_gender() == gen.lib.Person.MALE:
return (self.get_father(secondRel),common)
return (self.get_father(secondRel), common)
else:
return (self.get_mother(secondRel),common)
return (self.get_mother(secondRel), common)
elif secondRel == 0:
if other_person.get_gender() == gen.lib.Person.MALE:
return (self.get_son(firstRel),common)
return (self.get_son(firstRel), common)
else:
return (self.get_daughter(firstRel),common)
return (self.get_daughter(firstRel), common)
elif firstRel == 1:
if other_person.get_gender() == gen.lib.Person.MALE:
return (self.get_uncle(secondRel),common)
return (self.get_uncle(secondRel), common)
else:
return (self.get_aunt(secondRel),common)
return (self.get_aunt(secondRel), common)
elif secondRel == 1:
if other_person.get_gender() == gen.lib.Person.MALE:
return (self.get_nephew(firstRel-1),common)
return (self.get_nephew(firstRel-1), common)
else:
return (self.get_niece(firstRel-1),common)
return (self.get_niece(firstRel-1), common)
elif firstRel == secondRel == 2:
if other_person.get_gender() == gen.lib.Person.MALE:
return ('vlastní bratranec',common)
return ('vlastní bratranec', common)
else:
return ('vlastní sestřenice',common)
return ('vlastní sestřenice', common)
elif firstRel == 3 and secondRel == 2:
if other_person.get_gender() == gen.lib.Person.MALE:
return ('bratranec druhého stupně',common)
return ('bratranec druhého stupně', common)
else:
return ('sestřenice druhého stupně',common)
return ('sestřenice druhého stupně', common)
elif firstRel == 2 and secondRel == 3:
if other_person.get_gender() == gen.lib.Person.MALE:
return ('bratranec druhého stupně',common)
return ('bratranec druhého stupně', common)
else:
return ('sestřenice druhého stupně',common)
return ('sestřenice druhého stupně', common)
else:
if other_person.get_gender() == gen.lib.Person.MALE:
if firstRel+secondRel>len(_level_name)-1:
return (self.get_male_cousin(firstRel+secondRel),common)
if firstRel+secondRel > len(_level_name)-1:
return (self.get_male_cousin(firstRel+secondRel), common)
else:
return ('vzdálený bratranec',common)
return ('vzdálený bratranec', common)
else:
if firstRel+secondRel>len(_level_name)-1:
return (self.get_female_cousin(firstRel+secondRel),common)
if firstRel+secondRel > len(_level_name)-1:
return (self.get_female_cousin(firstRel+secondRel), common)
else:
return ('vzdálená sestřenice',common)
return ('vzdálená sestřenice', common)