* src/Utils.py (for_each_ancestor): Switch from Person to handle.
* src/GenericFilter.py (for_each_ancestor): Pass db instance. svn: r3902
This commit is contained in:
parent
b4c0e9df90
commit
edfb524597
@ -9,6 +9,9 @@
|
||||
* src/GrampsGconfKeys.py (get_event_id_prefix): Typo.
|
||||
* src/GrampsIniKeys.py (get_event_id_prefix): Typo.
|
||||
|
||||
* src/Utils.py (for_each_ancestor): Switch from Person to handle.
|
||||
* src/GenericFilter.py (for_each_ancestor): Pass db instance.
|
||||
|
||||
2005-01-10 Martin Hawlisch <Martin.Hawlisch@gmx.de>
|
||||
* src/EditPlace.py (EditPlace.display_references):
|
||||
Fix event and object references.
|
||||
|
@ -1,7 +1,7 @@
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2002-2004 Donald N. Allingham
|
||||
# Copyright (C) 2002-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
|
||||
@ -37,7 +37,13 @@ from xml.sax import make_parser,handler,SAXParseException
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import os
|
||||
import string
|
||||
from gettext import gettext as _
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# gtk
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import gtk
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
@ -51,7 +57,6 @@ import Date
|
||||
import DateHandler
|
||||
import NameDisplay
|
||||
from TransTable import TransTable
|
||||
from gettext import gettext as _
|
||||
from Utils import for_each_ancestor
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
@ -113,7 +118,7 @@ class Rule:
|
||||
for i in range(0,len(self.list)):
|
||||
if self.list[i]:
|
||||
v.append('%s="%s"' % (_(self.labels[i]),_(self.list[i])))
|
||||
return string.join(v,'; ')
|
||||
return ';'.join(v)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -897,7 +902,7 @@ class HasCommonAncestorWith(Rule):
|
||||
p_id = self.list[0]
|
||||
if p_id:
|
||||
def init(self,pid): self.ancestor_cache[pid] = 1
|
||||
for_each_ancestor([p_id],init,self)
|
||||
for_each_ancestor(db,[p_id],init,self)
|
||||
|
||||
def apply(self,db,p_id):
|
||||
# On the first call, we build the ancestor cache for the
|
||||
@ -905,7 +910,7 @@ class HasCommonAncestorWith(Rule):
|
||||
# we browse his ancestors until we found one in the cache.
|
||||
if len(self.ancestor_cache) == 0:
|
||||
self.init_ancestor_cache(db)
|
||||
return for_each_ancestor([p_id],
|
||||
return for_each_ancestor(db,[p_id],
|
||||
lambda self,p_id: self.ancestor_cache.has_key(p_id),
|
||||
self);
|
||||
|
||||
@ -939,7 +944,7 @@ class HasCommonAncestorWithFilterMatch(HasCommonAncestorWith):
|
||||
for p_id in db.get_person_handles(sort_handles=False):
|
||||
if (not self.ancestor_cache.has_key (p_id)
|
||||
and filt.apply (db, p_id)):
|
||||
for_each_ancestor([p_id],init,self)
|
||||
for_each_ancestor(db,[p_id],init,self)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -998,7 +1003,7 @@ class HasEvent(Rule):
|
||||
val = 1
|
||||
if self.list[0] and event.get_name() != self.list[0]:
|
||||
val = 0
|
||||
if self.list[3] and string.find(event.get_description().upper(),
|
||||
if self.list[3] and event.get_description().upper().find(
|
||||
self.list[3].upper())==-1:
|
||||
val = 0
|
||||
if self.date:
|
||||
@ -1009,7 +1014,7 @@ class HasEvent(Rule):
|
||||
if pl_id:
|
||||
pl = db.get_place_from_handle(pl_id)
|
||||
pn = pl.get_title()
|
||||
if string.find(pn.upper(),self.list[2].upper()) == -1:
|
||||
if pn.upper().find(self.list[2].upper()) == -1:
|
||||
val = 0
|
||||
if val == 1:
|
||||
return 1
|
||||
@ -1054,7 +1059,7 @@ class HasFamilyEvent(Rule):
|
||||
if self.list[0] and event.get_name() != self.list[0]:
|
||||
val = 0
|
||||
v = self.list[3]
|
||||
if v and string.find(event.get_description().upper(),v.upper())==-1:
|
||||
if v and event.get_description().upper().find(v.upper())==-1:
|
||||
val = 0
|
||||
if self.date:
|
||||
if date_cmp(self.date,event.get_date_object()):
|
||||
@ -1063,7 +1068,7 @@ class HasFamilyEvent(Rule):
|
||||
if pl_id:
|
||||
pl = db.get_place_from_handle(pl_id)
|
||||
pn = pl.get_title()
|
||||
if self.list[2] and string.find(pn,self.list[2].upper()) == -1:
|
||||
if self.list[2] and pn.find(self.list[2].upper()) == -1:
|
||||
val = 0
|
||||
if val == 1:
|
||||
return 1
|
||||
@ -1160,7 +1165,7 @@ class HasBirth(Rule):
|
||||
return 0
|
||||
event = db.get_event_from_handle(event_handle)
|
||||
ed = event.get_description().upper()
|
||||
if len(self.list) > 2 and string.find(ed,self.list[2].upper())==-1:
|
||||
if len(self.list) > 2 and ed.find(self.list[2].upper())==-1:
|
||||
return 0
|
||||
if self.date:
|
||||
if date_cmp(self.date,event.get_date_object()) == 0:
|
||||
@ -1169,7 +1174,7 @@ class HasBirth(Rule):
|
||||
if pl_id:
|
||||
pl = db.get_place_from_handle(pl_id)
|
||||
pn = pl.get_title()
|
||||
if len(self.list) > 1 and string.find(pn,self.list[1].upper()) == -1:
|
||||
if len(self.list) > 1 and pn.find(self.list[1].upper()) == -1:
|
||||
return 0
|
||||
return 1
|
||||
|
||||
@ -1206,7 +1211,7 @@ class HasDeath(Rule):
|
||||
return 0
|
||||
event = db.get_event_from_handle(event_handle)
|
||||
ed = event.get_description().upper()
|
||||
if self.list[2] and string.find(ed,self.list[2].upper())==-1:
|
||||
if self.list[2] and ed.find(self.list[2].upper())==-1:
|
||||
return 0
|
||||
if self.date:
|
||||
if date_cmp(self.date,event.get_date_object()) == 0:
|
||||
@ -1215,7 +1220,7 @@ class HasDeath(Rule):
|
||||
if pl_id:
|
||||
pl = db.get_place_from_handle(pl_id)
|
||||
pn = pl.get_title()
|
||||
if self.list[1] and string.find(pn,self.list[1].upper()) == -1:
|
||||
if self.list[1] and pn.find(self.list[1].upper()) == -1:
|
||||
return 0
|
||||
return 1
|
||||
|
||||
@ -1238,7 +1243,7 @@ class HasAttribute(Rule):
|
||||
if self.list[0] and event.get_type() != self.list[0]:
|
||||
return 0
|
||||
ev = event.get_value().upper()
|
||||
if self.list[1] and string.find(ev,self.list[1].upper())==-1:
|
||||
if self.list[1] and ev.find(self.list[1].upper())==-1:
|
||||
return 0
|
||||
return 1
|
||||
|
||||
@ -1264,7 +1269,7 @@ class HasFamilyAttribute(Rule):
|
||||
if self.list[0] and event.get_type() != self.list[0]:
|
||||
val = 0
|
||||
ev = event.get_value().upper()
|
||||
if self.list[1] and string.find(ev,self.list[1].upper())==-1:
|
||||
if self.list[1] and ev.find(self.list[1].upper())==-1:
|
||||
val = 0
|
||||
if val == 1:
|
||||
return 1
|
||||
@ -1297,13 +1302,13 @@ class HasNameOf(Rule):
|
||||
p = db.get_person_from_handle(p_id)
|
||||
for name in [p.get_primary_name()] + p.get_alternate_names():
|
||||
val = 1
|
||||
if self.f and string.find(name.get_first_name().upper(),self.f.upper()) == -1:
|
||||
if self.f and name.get_first_name().upper().find(self.f.upper()) == -1:
|
||||
val = 0
|
||||
if self.l and string.find(name.get_surname().upper(),self.l.upper()) == -1:
|
||||
if self.l and name.get_surname().upper().find(self.l.upper()) == -1:
|
||||
val = 0
|
||||
if self.s and string.find(name.get_suffix().upper(),self.s.upper()) == -1:
|
||||
if self.s and name.get_suffix().upper().find(self.s.upper()) == -1:
|
||||
val = 0
|
||||
if self.t and string.find(name.get_title().upper(),self.t.upper()) == -1:
|
||||
if self.t and name.get_title().upper().find(self.t.upper()) == -1:
|
||||
val = 0
|
||||
if val == 1:
|
||||
return 1
|
||||
@ -1332,7 +1337,7 @@ class SearchName(Rule):
|
||||
self.f = self.list[0]
|
||||
p = db.get_person_from_handle(p_id)
|
||||
n = NameDisplay.displayer.display(p)
|
||||
return self.f and string.find(n.upper(),self.f.upper()) != -1
|
||||
return self.f and n.upper().find(self.f.upper()) != -1
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
|
28
src/Utils.py
28
src/Utils.py
@ -1,7 +1,7 @@
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2000-2004 Donald N. Allingham
|
||||
# Copyright (C) 2000-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
|
||||
@ -334,7 +334,7 @@ def build_columns(tree,list):
|
||||
# Iterate over ancestors.
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
def for_each_ancestor(start, func, data):
|
||||
def for_each_ancestor(db, start, func, data):
|
||||
"""
|
||||
Recursively iterate (breadth-first) over ancestors of
|
||||
people listed in start.
|
||||
@ -345,21 +345,23 @@ def for_each_ancestor(start, func, data):
|
||||
todo = start
|
||||
doneIds = {}
|
||||
while len(todo):
|
||||
p = todo.pop()
|
||||
pid = p.get_handle()
|
||||
# Don't process the same Id twice. This can happen
|
||||
p_handle = todo.pop()
|
||||
p = db.get_person_from_handle(p_handle)
|
||||
# Don't process the same handle twice. This can happen
|
||||
# if there is a cycle in the database, or if the
|
||||
# initial list contains X and some of X's ancestors.
|
||||
if doneIds.has_key(pid):
|
||||
if doneIds.has_key(p_handle):
|
||||
continue
|
||||
doneIds[pid] = 1
|
||||
if func(data,pid):
|
||||
doneIds[p_handle] = 1
|
||||
if func(data,p_handle):
|
||||
return 1
|
||||
for fam, mrel, frel in p.get_parent_family_handle_list():
|
||||
f = fam.get_father_handle()
|
||||
m = fam.get_mother_handle()
|
||||
if f: todo.append(f)
|
||||
if m: todo.append(m)
|
||||
for fam_handle, mrel, frel in p.get_parent_family_handle_list():
|
||||
fam = db.get_family_from_handle(fam_handle)
|
||||
if fam:
|
||||
f_handle = fam.get_father_handle()
|
||||
m_handle = fam.get_mother_handle()
|
||||
if f_handle: todo.append(f_handle)
|
||||
if m_handle: todo.append(m_handle)
|
||||
return 0
|
||||
|
||||
def title(n):
|
||||
|
Loading…
Reference in New Issue
Block a user