From 6630094f284b8569da308ec473994d7a5b928af5 Mon Sep 17 00:00:00 2001 From: Alex Roitman Date: Fri, 10 Nov 2006 07:27:11 +0000 Subject: [PATCH] 2006-11-09 Alex Roitman * src/Filters/Rules/Person/_HasDeath.py (apply): Match any of the death events. * src/Filters/Rules/Person/_HasBirth.py (apply): Match any of the birth events. svn: r7603 --- ChangeLog | 6 ++++ src/Filters/Rules/Person/_HasBirth.py | 51 +++++++++++++++----------- src/Filters/Rules/Person/_HasDeath.py | 52 +++++++++++++++------------ 3 files changed, 66 insertions(+), 43 deletions(-) diff --git a/ChangeLog b/ChangeLog index b9a71dcb9..76b688fe3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2006-11-09 Alex Roitman + * src/Filters/Rules/Person/_HasDeath.py (apply): Match any of the + death events. + * src/Filters/Rules/Person/_HasBirth.py (apply): Match any of the + birth events. + 2006-11-09 Don Allingham * src/DisplayModels/PageView.py: fix delete diff --git a/src/Filters/Rules/Person/_HasBirth.py b/src/Filters/Rules/Person/_HasBirth.py index 21078434c..63a4f5424 100644 --- a/src/Filters/Rules/Person/_HasBirth.py +++ b/src/Filters/Rules/Person/_HasBirth.py @@ -33,6 +33,7 @@ from gettext import gettext as _ # #------------------------------------------------------------------------- import DateHandler +from RelLib import EventType from Filters.Rules._Rule import Rule from Filters.Rules._RuleUtils import loose_date_cmp @@ -57,24 +58,32 @@ class HasBirth(Rule): self.date = None def apply(self,db,person): - event_ref = person.get_birth_ref() - if not event_ref: - return False - event = db.get_event_from_handle(event_ref.ref) - ed = event.get_description().upper() - if self.list[2] \ - and ed.find(self.list[2].upper())==-1: - return False - if self.date: - if loose_date_cmp(self.date,event.get_date_object()) == 0: - return False - if self.list[1]: - pl_id = event.get_place_handle() - if pl_id: - pl = db.get_place_from_handle(pl_id) - pn = pl.get_title().upper() - if pn.find(self.list[1].upper()) == -1: - return False - else: - return False - return True + for event_ref in person.get_event_ref_list(): + event = db.get_event_from_handle(event_ref.ref) + if event.get_type() != EventType.BIRTH: + # No match: wrong type + continue + ed = event.get_description().upper() + if self.list[2] \ + and ed.find(self.list[2].upper())==-1: + # No match: wrong description + continue + if self.date: + if loose_date_cmp(self.date,event.get_date_object()) == 0: + # No match: wrong date + continue + if self.list[1]: + pl_id = event.get_place_handle() + if pl_id: + pl = db.get_place_from_handle(pl_id) + pn = pl.get_title().upper() + if pn.find(self.list[1].upper()) == -1: + # No match: wrong place + continue + else: + # No match: event has no place, but place specified + continue + # This event matched: exit positive + return True + # Nothing matched: exit negative + return False diff --git a/src/Filters/Rules/Person/_HasDeath.py b/src/Filters/Rules/Person/_HasDeath.py index 20c17a313..da3296c6b 100644 --- a/src/Filters/Rules/Person/_HasDeath.py +++ b/src/Filters/Rules/Person/_HasDeath.py @@ -33,6 +33,7 @@ from gettext import gettext as _ # #------------------------------------------------------------------------- import DateHandler +from RelLib import EventType from Filters.Rules._Rule import Rule from Filters.Rules._RuleUtils import loose_date_cmp @@ -57,25 +58,32 @@ class HasDeath(Rule): self.date = None def apply(self,db,person): - event_ref = person.get_death_ref() - if not event_ref: - return False - event_handle = event_ref.ref - event = db.get_event_from_handle(event_handle) - ed = event.get_description().upper() - if self.list[2] \ - and ed.find(self.list[2].upper())==-1: - return False - if self.date: - if loose_date_cmp(self.date,event.get_date_object()) == 0: - return False - if self.list[1]: - pl_id = event.get_place_handle() - if pl_id: - pl = db.get_place_from_handle(pl_id) - pn = pl.get_title().upper() - if self.list[1] and pn.find(self.list[1].upper()) == -1: - return False - else: - return False - return True + for event_ref in person.get_event_ref_list(): + event = db.get_event_from_handle(event_ref.ref) + if event.get_type() != EventType.DEATH: + # No match: wrong type + continue + ed = event.get_description().upper() + if self.list[2] \ + and ed.find(self.list[2].upper())==-1: + # No match: wrong description + continue + if self.date: + if loose_date_cmp(self.date,event.get_date_object()) == 0: + # No match: wrong date + continue + if self.list[1]: + pl_id = event.get_place_handle() + if pl_id: + pl = db.get_place_from_handle(pl_id) + pn = pl.get_title().upper() + if pn.find(self.list[1].upper()) == -1: + # No match: wrong place + continue + else: + # No match: event has no place, but place specified + continue + # This event matched: exit positive + return True + # Nothing matched: exit negative + return False