Update
svn: r6789
This commit is contained in:
parent
a6025569d3
commit
a32ed5e6bb
@ -20,7 +20,10 @@
|
|||||||
|
|
||||||
# $Id$
|
# $Id$
|
||||||
|
|
||||||
"View/Verify"
|
"""
|
||||||
|
A plugin to verify the data against user-adjsted tests.
|
||||||
|
This is the research tool, not the low-level data ingerity check.
|
||||||
|
"""
|
||||||
|
|
||||||
#------------------------------------------------------------------------
|
#------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
@ -56,38 +59,38 @@ from PluginUtils import Tool, register_tool
|
|||||||
# temp storage and related functions
|
# temp storage and related functions
|
||||||
#
|
#
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
_person_store = {}
|
_person_cache = {}
|
||||||
_family_store = {}
|
_family_cache = {}
|
||||||
_event_store = {}
|
_event_cache = {}
|
||||||
|
|
||||||
def find_event(db,handle):
|
def find_event(db,handle):
|
||||||
try:
|
try:
|
||||||
obj = _event_store[handle]
|
obj = _event_cache[handle]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
obj = db.get_event_from_handle(handle)
|
obj = db.get_event_from_handle(handle)
|
||||||
_event_store[handle] = obj
|
_event_cache[handle] = obj
|
||||||
return obj
|
return obj
|
||||||
|
|
||||||
def find_person(db,handle):
|
def find_person(db,handle):
|
||||||
try:
|
try:
|
||||||
obj = _person_store[handle]
|
obj = _person_cache[handle]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
obj = db.get_person_from_handle(handle)
|
obj = db.get_person_from_handle(handle)
|
||||||
_person_store[handle] = obj
|
_person_cache[handle] = obj
|
||||||
return obj
|
return obj
|
||||||
|
|
||||||
def find_family(db,handle):
|
def find_family(db,handle):
|
||||||
try:
|
try:
|
||||||
obj = _family_store[handle]
|
obj = _family_cache[handle]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
obj = db.get_family_from_handle(handle)
|
obj = db.get_family_from_handle(handle)
|
||||||
_family_store[handle] = obj
|
_family_cache[handle] = obj
|
||||||
return obj
|
return obj
|
||||||
|
|
||||||
def clear_storage():
|
def clear_cache():
|
||||||
_person_store.clear()
|
_person_cache.clear()
|
||||||
_family_store.clear()
|
_family_cache.clear()
|
||||||
_event_store.clear()
|
_event_cache.clear()
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
@ -210,8 +213,11 @@ class Verify(Tool.Tool, ManagedWindow, UpdateCallback):
|
|||||||
|
|
||||||
def add_results_cli(self,results):
|
def add_results_cli(self,results):
|
||||||
# print data for the user, no GUI
|
# print data for the user, no GUI
|
||||||
(msg,gramps_id,name,the_type,rule_id,handle) = results
|
(msg,gramps_id,name,the_type,rule_id,severity,handle) = results
|
||||||
print "%s, %s: %s, %s" % (msg,the_type,gramps_id,name)
|
if severity == Rule.WARNING:
|
||||||
|
print "W: %s, %s: %s, %s" % (msg,the_type,gramps_id,name)
|
||||||
|
elif severity == Rule.ERROR:
|
||||||
|
print "E: %s, %s: %s, %s" % (msg,the_type,gramps_id,name)
|
||||||
|
|
||||||
def init_gui(self):
|
def init_gui(self):
|
||||||
# Draw dialog and make it handle everything
|
# Draw dialog and make it handle everything
|
||||||
@ -365,10 +371,6 @@ class Verify(Tool.Tool, ManagedWindow, UpdateCallback):
|
|||||||
oldunm = self.options.handler.options_dict['oldunm']
|
oldunm = self.options.handler.options_dict['oldunm']
|
||||||
estimate_age = self.options.handler.options_dict['estimate_age']
|
estimate_age = self.options.handler.options_dict['estimate_age']
|
||||||
|
|
||||||
## if not cli:
|
|
||||||
## progress = Utils.ProgressMeter(_('Verify the database'),'')
|
|
||||||
## progress.set_pass(_('Checking people data'),
|
|
||||||
## self.db.get_number_of_people())
|
|
||||||
|
|
||||||
self.set_total(self.db.get_number_of_people() +
|
self.set_total(self.db.get_number_of_people() +
|
||||||
self.db.get_number_of_families())
|
self.db.get_number_of_families())
|
||||||
@ -376,134 +378,56 @@ class Verify(Tool.Tool, ManagedWindow, UpdateCallback):
|
|||||||
for person_handle in person_handles:
|
for person_handle in person_handles:
|
||||||
person = find_person(self.db,person_handle)
|
person = find_person(self.db,person_handle)
|
||||||
|
|
||||||
the_rule = BirthAfterBapt(self.db,person)
|
rule_list = [
|
||||||
if the_rule.broken():
|
BirthAfterBapt(self.db,person),
|
||||||
self.add_results(the_rule.report_itself())
|
DeathBeforeBapt(self.db,person),
|
||||||
|
BirthAfterBury(self.db,person),
|
||||||
the_rule = DeathBeforeBapt(self.db,person)
|
DeathAfterBury(self.db,person),
|
||||||
if the_rule.broken():
|
BirthAfterDeath(self.db,person),
|
||||||
self.add_results(the_rule.report_itself())
|
BaptAfterBury(self.db,person),
|
||||||
|
OldAge(self.db,person,oldage,estimate_age),
|
||||||
the_rule = BirthAfterBury(self.db,person)
|
UnknownGender(self.db,person),
|
||||||
if the_rule.broken():
|
MultipleParents(self.db,person),
|
||||||
self.add_results(the_rule.report_itself())
|
MarriedOften(self.db,person,wedder),
|
||||||
|
OldUnmarried(self.db,person,oldunm,estimate_age),
|
||||||
the_rule = DeathAfterBury(self.db,person)
|
TooManyChildren(self.db,person,mxchilddad,mxchildmom),
|
||||||
if the_rule.broken():
|
]
|
||||||
self.add_results(the_rule.report_itself())
|
|
||||||
|
|
||||||
the_rule = BirthAfterDeath(self.db,person)
|
|
||||||
if the_rule.broken():
|
|
||||||
self.add_results(the_rule.report_itself())
|
|
||||||
|
|
||||||
the_rule = BaptAfterBury(self.db,person)
|
|
||||||
if the_rule.broken():
|
|
||||||
self.add_results(the_rule.report_itself())
|
|
||||||
|
|
||||||
the_rule = OldAge(self.db,person,oldage,estimate_age)
|
|
||||||
if the_rule.broken():
|
|
||||||
self.add_results(the_rule.report_itself())
|
|
||||||
|
|
||||||
the_rule = UnknownGender(self.db,person)
|
|
||||||
if the_rule.broken():
|
|
||||||
self.add_results(the_rule.report_itself())
|
|
||||||
|
|
||||||
the_rule = MultipleParents(self.db,person)
|
|
||||||
if the_rule.broken():
|
|
||||||
self.add_results(the_rule.report_itself())
|
|
||||||
|
|
||||||
the_rule = MarriedOften(self.db,person,wedder)
|
|
||||||
if the_rule.broken():
|
|
||||||
self.add_results(the_rule.report_itself())
|
|
||||||
|
|
||||||
the_rule = OldUnmarried(self.db,person,oldunm,estimate_age)
|
|
||||||
if the_rule.broken():
|
|
||||||
self.add_results(the_rule.report_itself())
|
|
||||||
|
|
||||||
the_rule = TooManyChildren(self.db,person,mxchilddad,mxchildmom)
|
|
||||||
if the_rule.broken():
|
|
||||||
self.add_results(the_rule.report_itself())
|
|
||||||
|
|
||||||
clear_storage()
|
|
||||||
## if not cli:
|
|
||||||
## progress.step()
|
|
||||||
self.update()
|
|
||||||
|
|
||||||
## if not cli:
|
for rule in rule_list:
|
||||||
## progress.set_pass(_('Checking family data'),
|
if rule.broken():
|
||||||
## self.db.get_number_of_families())
|
self.add_results(rule.report_itself())
|
||||||
|
|
||||||
|
clear_cache()
|
||||||
|
self.update()
|
||||||
|
|
||||||
# Family-based rules
|
# Family-based rules
|
||||||
for family_handle in self.db.get_family_handles():
|
for family_handle in self.db.get_family_handles():
|
||||||
family = find_family(self.db,family_handle)
|
family = find_family(self.db,family_handle)
|
||||||
|
|
||||||
the_rule = SameSexFamily(self.db,family)
|
rule_list = [
|
||||||
if the_rule.broken():
|
SameSexFamily(self.db,family),
|
||||||
self.add_results(the_rule.report_itself())
|
FemaleHusband(self.db,family),
|
||||||
|
MaleWife(self.db,family),
|
||||||
|
SameSurnameFamily(self.db,family),
|
||||||
|
LargeAgeGapFamily(self.db,family,hwdif,estimate_age),
|
||||||
|
MarriageBeforeBirth(self.db,family,estimate_age),
|
||||||
|
MarriageAfterDeath(self.db,family,estimate_age),
|
||||||
|
EarlyMarriage(self.db,family,yngmar,estimate_age),
|
||||||
|
LateMarriage(self.db,family,oldmar,estimate_age),
|
||||||
|
OldParent(self.db,family,oldmom,olddad,estimate_age),
|
||||||
|
YoungParent(self.db,family,yngmom,yngdad,estimate_age),
|
||||||
|
UnbornParent(self.db,family,estimate_age),
|
||||||
|
DeadParent(self.db,family,estimate_age),
|
||||||
|
LargeChildrenSpan(self.db,family,cbspan,estimate_age),
|
||||||
|
LargeChildrenAgeDiff(self.db,family,cspace,estimate_age),
|
||||||
|
]
|
||||||
|
|
||||||
the_rule = FemaleHusband(self.db,family)
|
for rule in rule_list:
|
||||||
if the_rule.broken():
|
if rule.broken():
|
||||||
self.add_results(the_rule.report_itself())
|
self.add_results(rule.report_itself())
|
||||||
|
|
||||||
the_rule = MaleWife(self.db,family)
|
clear_cache()
|
||||||
if the_rule.broken():
|
|
||||||
self.add_results(the_rule.report_itself())
|
|
||||||
|
|
||||||
the_rule = SameSurnameFamily(self.db,family)
|
|
||||||
if the_rule.broken():
|
|
||||||
self.add_results(the_rule.report_itself())
|
|
||||||
|
|
||||||
the_rule = LargeAgeGapFamily(self.db,family,hwdif,estimate_age)
|
|
||||||
if the_rule.broken():
|
|
||||||
self.add_results(the_rule.report_itself())
|
|
||||||
|
|
||||||
the_rule = MarriageBeforeBirth(self.db,family,estimate_age)
|
|
||||||
if the_rule.broken():
|
|
||||||
self.add_results(the_rule.report_itself())
|
|
||||||
|
|
||||||
the_rule = MarriageAfterDeath(self.db,family,estimate_age)
|
|
||||||
if the_rule.broken():
|
|
||||||
self.add_results(the_rule.report_itself())
|
|
||||||
|
|
||||||
the_rule = EarlyMarriage(self.db,family,yngmar,estimate_age)
|
|
||||||
if the_rule.broken():
|
|
||||||
self.add_results(the_rule.report_itself())
|
|
||||||
|
|
||||||
the_rule = LateMarriage(self.db,family,oldmar,estimate_age)
|
|
||||||
if the_rule.broken():
|
|
||||||
self.add_results(the_rule.report_itself())
|
|
||||||
|
|
||||||
the_rule = OldParent(self.db,family,oldmom,olddad,estimate_age)
|
|
||||||
if the_rule.broken():
|
|
||||||
self.add_results(the_rule.report_itself())
|
|
||||||
|
|
||||||
the_rule = YoungParent(self.db,family,yngmom,yngdad,estimate_age)
|
|
||||||
if the_rule.broken():
|
|
||||||
self.add_results(the_rule.report_itself())
|
|
||||||
|
|
||||||
the_rule = UnbornParent(self.db,family,estimate_age)
|
|
||||||
if the_rule.broken():
|
|
||||||
self.add_results(the_rule.report_itself())
|
|
||||||
|
|
||||||
the_rule = DeadParent(self.db,family,estimate_age)
|
|
||||||
if the_rule.broken():
|
|
||||||
self.add_results(the_rule.report_itself())
|
|
||||||
|
|
||||||
the_rule = LargeChildrenSpan(self.db,family,cbspan,estimate_age)
|
|
||||||
if the_rule.broken():
|
|
||||||
self.add_results(the_rule.report_itself())
|
|
||||||
|
|
||||||
the_rule = LargeChildrenAgeDiff(self.db,family,cspace,estimate_age)
|
|
||||||
if the_rule.broken():
|
|
||||||
self.add_results(the_rule.report_itself())
|
|
||||||
|
|
||||||
clear_storage()
|
|
||||||
self.update()
|
self.update()
|
||||||
## if not cli:
|
|
||||||
## progress.step()
|
|
||||||
|
|
||||||
## if not cli:
|
|
||||||
## progress.close()
|
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
@ -572,8 +496,14 @@ class VerifyResults(ManagedWindow):
|
|||||||
cell.set_property('stock-id', 'gramps-family' )
|
cell.set_property('stock-id', 'gramps-family' )
|
||||||
|
|
||||||
def add_results(self,results):
|
def add_results(self,results):
|
||||||
fg = None
|
(msg,gramps_id,name,the_type,rule_id,severity,handle) = results
|
||||||
(msg,gramps_id,name,the_type,rule_id,handle) = results
|
if severity == Rule.ERROR:
|
||||||
|
fg = 'red'
|
||||||
|
## fg = '#8b008b'
|
||||||
|
## elif severity == Rule.WARNING:
|
||||||
|
## fg = '#008b00'
|
||||||
|
else:
|
||||||
|
fg = None
|
||||||
self.warn_model.append(row=[msg,gramps_id,name,
|
self.warn_model.append(row=[msg,gramps_id,name,
|
||||||
the_type,rule_id,handle,fg])
|
the_type,rule_id,handle,fg])
|
||||||
|
|
||||||
@ -670,6 +600,8 @@ class Rule:
|
|||||||
ERROR = 1
|
ERROR = 1
|
||||||
WARNING = 2
|
WARNING = 2
|
||||||
|
|
||||||
|
SEVERITY = WARNING
|
||||||
|
|
||||||
def __init__(self,db,obj):
|
def __init__(self,db,obj):
|
||||||
self.db = db
|
self.db = db
|
||||||
self.obj = obj
|
self.obj = obj
|
||||||
@ -699,10 +631,11 @@ class Rule:
|
|||||||
handle = self.get_handle()
|
handle = self.get_handle()
|
||||||
the_type = self.TYPE
|
the_type = self.TYPE
|
||||||
rule_id = self.ID
|
rule_id = self.ID
|
||||||
|
severity = self.SEVERITY
|
||||||
name = self.get_name()
|
name = self.get_name()
|
||||||
gramps_id = self.get_id()
|
gramps_id = self.get_id()
|
||||||
msg = self.get_message()
|
msg = self.get_message()
|
||||||
return (msg,gramps_id,name,the_type,rule_id,handle)
|
return (msg,gramps_id,name,the_type,rule_id,severity,handle)
|
||||||
|
|
||||||
class PersonRule(Rule):
|
class PersonRule(Rule):
|
||||||
"""
|
"""
|
||||||
@ -727,6 +660,7 @@ class FamilyRule(Rule):
|
|||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
class BirthAfterBapt(PersonRule):
|
class BirthAfterBapt(PersonRule):
|
||||||
ID = 1
|
ID = 1
|
||||||
|
SEVERITY = Rule.ERROR
|
||||||
def broken(self):
|
def broken(self):
|
||||||
birth_date = get_birth_date(self.db,self.obj)
|
birth_date = get_birth_date(self.db,self.obj)
|
||||||
bapt_date = get_bapt_date(self.db,self.obj)
|
bapt_date = get_bapt_date(self.db,self.obj)
|
||||||
@ -740,6 +674,7 @@ class BirthAfterBapt(PersonRule):
|
|||||||
|
|
||||||
class DeathBeforeBapt(PersonRule):
|
class DeathBeforeBapt(PersonRule):
|
||||||
ID = 2
|
ID = 2
|
||||||
|
SEVERITY = Rule.ERROR
|
||||||
def broken(self):
|
def broken(self):
|
||||||
death_date = get_death_date(self.db,self.obj)
|
death_date = get_death_date(self.db,self.obj)
|
||||||
bapt_date = get_bapt_date(self.db,self.obj)
|
bapt_date = get_bapt_date(self.db,self.obj)
|
||||||
@ -753,6 +688,7 @@ class DeathBeforeBapt(PersonRule):
|
|||||||
|
|
||||||
class BirthAfterBury(PersonRule):
|
class BirthAfterBury(PersonRule):
|
||||||
ID = 3
|
ID = 3
|
||||||
|
SEVERITY = Rule.ERROR
|
||||||
def broken(self):
|
def broken(self):
|
||||||
birth_date = get_birth_date(self.db,self.obj)
|
birth_date = get_birth_date(self.db,self.obj)
|
||||||
bury_date = get_bury_date(self.db,self.obj)
|
bury_date = get_bury_date(self.db,self.obj)
|
||||||
@ -766,6 +702,7 @@ class BirthAfterBury(PersonRule):
|
|||||||
|
|
||||||
class DeathAfterBury(PersonRule):
|
class DeathAfterBury(PersonRule):
|
||||||
ID = 4
|
ID = 4
|
||||||
|
SEVERITY = Rule.ERROR
|
||||||
def broken(self):
|
def broken(self):
|
||||||
death_date = get_death_date(self.db,self.obj)
|
death_date = get_death_date(self.db,self.obj)
|
||||||
bury_date = get_bury_date(self.db,self.obj)
|
bury_date = get_bury_date(self.db,self.obj)
|
||||||
@ -779,6 +716,7 @@ class DeathAfterBury(PersonRule):
|
|||||||
|
|
||||||
class BirthAfterDeath(PersonRule):
|
class BirthAfterDeath(PersonRule):
|
||||||
ID = 5
|
ID = 5
|
||||||
|
SEVERITY = Rule.ERROR
|
||||||
def broken(self):
|
def broken(self):
|
||||||
birth_date = get_birth_date(self.db,self.obj)
|
birth_date = get_birth_date(self.db,self.obj)
|
||||||
death_date = get_death_date(self.db,self.obj)
|
death_date = get_death_date(self.db,self.obj)
|
||||||
@ -792,6 +730,7 @@ class BirthAfterDeath(PersonRule):
|
|||||||
|
|
||||||
class BaptAfterBury(PersonRule):
|
class BaptAfterBury(PersonRule):
|
||||||
ID = 6
|
ID = 6
|
||||||
|
SEVERITY = Rule.ERROR
|
||||||
def broken(self):
|
def broken(self):
|
||||||
bapt_date = get_bapt_date(self.db,self.obj)
|
bapt_date = get_bapt_date(self.db,self.obj)
|
||||||
bury_date = get_bury_date(self.db,self.obj)
|
bury_date = get_bury_date(self.db,self.obj)
|
||||||
@ -805,6 +744,7 @@ class BaptAfterBury(PersonRule):
|
|||||||
|
|
||||||
class OldAge(PersonRule):
|
class OldAge(PersonRule):
|
||||||
ID = 7
|
ID = 7
|
||||||
|
SEVERITY = Rule.WARNING
|
||||||
def __init__(self,db,person,old_age,est):
|
def __init__(self,db,person,old_age,est):
|
||||||
PersonRule.__init__(self,db,person)
|
PersonRule.__init__(self,db,person)
|
||||||
self.old_age = old_age
|
self.old_age = old_age
|
||||||
@ -819,6 +759,7 @@ class OldAge(PersonRule):
|
|||||||
|
|
||||||
class UnknownGender(PersonRule):
|
class UnknownGender(PersonRule):
|
||||||
ID = 8
|
ID = 8
|
||||||
|
SEVERITY = Rule.WARNING
|
||||||
def broken(self):
|
def broken(self):
|
||||||
female = self.obj.get_gender() == RelLib.Person.FEMALE
|
female = self.obj.get_gender() == RelLib.Person.FEMALE
|
||||||
male = self.obj.get_gender() == RelLib.Person.MALE
|
male = self.obj.get_gender() == RelLib.Person.MALE
|
||||||
@ -829,6 +770,7 @@ class UnknownGender(PersonRule):
|
|||||||
|
|
||||||
class MultipleParents(PersonRule):
|
class MultipleParents(PersonRule):
|
||||||
ID = 9
|
ID = 9
|
||||||
|
SEVERITY = Rule.WARNING
|
||||||
def broken(self):
|
def broken(self):
|
||||||
n_parent_sets = len(self.obj.get_parent_family_handle_list())
|
n_parent_sets = len(self.obj.get_parent_family_handle_list())
|
||||||
return (n_parent_sets>1)
|
return (n_parent_sets>1)
|
||||||
@ -838,6 +780,7 @@ class MultipleParents(PersonRule):
|
|||||||
|
|
||||||
class MarriedOften(PersonRule):
|
class MarriedOften(PersonRule):
|
||||||
ID = 10
|
ID = 10
|
||||||
|
SEVERITY = Rule.WARNING
|
||||||
def __init__(self,db,person,wedder):
|
def __init__(self,db,person,wedder):
|
||||||
PersonRule.__init__(self,db,person)
|
PersonRule.__init__(self,db,person)
|
||||||
self.wedder = wedder
|
self.wedder = wedder
|
||||||
@ -851,6 +794,7 @@ class MarriedOften(PersonRule):
|
|||||||
|
|
||||||
class OldUnmarried(PersonRule):
|
class OldUnmarried(PersonRule):
|
||||||
ID = 11
|
ID = 11
|
||||||
|
SEVERITY = Rule.WARNING
|
||||||
def __init__(self,db,person,old_unm,est):
|
def __init__(self,db,person,old_unm,est):
|
||||||
PersonRule.__init__(self,db,person)
|
PersonRule.__init__(self,db,person)
|
||||||
self.old_unm = old_unm
|
self.old_unm = old_unm
|
||||||
@ -866,6 +810,7 @@ class OldUnmarried(PersonRule):
|
|||||||
|
|
||||||
class TooManyChildren(PersonRule):
|
class TooManyChildren(PersonRule):
|
||||||
ID = 12
|
ID = 12
|
||||||
|
SEVERITY = Rule.WARNING
|
||||||
def __init__(self,db,obj,mx_child_dad,mx_child_mom):
|
def __init__(self,db,obj,mx_child_dad,mx_child_mom):
|
||||||
PersonRule.__init__(self,db,obj)
|
PersonRule.__init__(self,db,obj)
|
||||||
self.mx_child_dad = mx_child_dad
|
self.mx_child_dad = mx_child_dad
|
||||||
@ -889,6 +834,7 @@ class TooManyChildren(PersonRule):
|
|||||||
|
|
||||||
class SameSexFamily(FamilyRule):
|
class SameSexFamily(FamilyRule):
|
||||||
ID = 13
|
ID = 13
|
||||||
|
SEVERITY = Rule.WARNING
|
||||||
def broken(self):
|
def broken(self):
|
||||||
mother = get_mother(self.db,self.obj)
|
mother = get_mother(self.db,self.obj)
|
||||||
father = get_father(self.db,self.obj)
|
father = get_father(self.db,self.obj)
|
||||||
@ -903,6 +849,7 @@ class SameSexFamily(FamilyRule):
|
|||||||
|
|
||||||
class FemaleHusband(FamilyRule):
|
class FemaleHusband(FamilyRule):
|
||||||
ID = 14
|
ID = 14
|
||||||
|
SEVERITY = Rule.WARNING
|
||||||
def broken(self):
|
def broken(self):
|
||||||
father = get_father(self.db,self.obj)
|
father = get_father(self.db,self.obj)
|
||||||
return (father and (father.get_gender() == RelLib.Person.FEMALE))
|
return (father and (father.get_gender() == RelLib.Person.FEMALE))
|
||||||
@ -912,6 +859,7 @@ class FemaleHusband(FamilyRule):
|
|||||||
|
|
||||||
class MaleWife(FamilyRule):
|
class MaleWife(FamilyRule):
|
||||||
ID = 15
|
ID = 15
|
||||||
|
SEVERITY = Rule.WARNING
|
||||||
def broken(self):
|
def broken(self):
|
||||||
mother = get_mother(self.db,self.obj)
|
mother = get_mother(self.db,self.obj)
|
||||||
return (mother and (mother.get_gender() == RelLib.Person.MALE))
|
return (mother and (mother.get_gender() == RelLib.Person.MALE))
|
||||||
@ -921,6 +869,7 @@ class MaleWife(FamilyRule):
|
|||||||
|
|
||||||
class SameSurnameFamily(FamilyRule):
|
class SameSurnameFamily(FamilyRule):
|
||||||
ID = 16
|
ID = 16
|
||||||
|
SEVERITY = Rule.WARNING
|
||||||
def broken(self):
|
def broken(self):
|
||||||
mother = get_mother(self.db,self.obj)
|
mother = get_mother(self.db,self.obj)
|
||||||
father = get_father(self.db,self.obj)
|
father = get_father(self.db,self.obj)
|
||||||
@ -936,6 +885,7 @@ class SameSurnameFamily(FamilyRule):
|
|||||||
|
|
||||||
class LargeAgeGapFamily(FamilyRule):
|
class LargeAgeGapFamily(FamilyRule):
|
||||||
ID = 17
|
ID = 17
|
||||||
|
SEVERITY = Rule.WARNING
|
||||||
def __init__(self,db,obj,hw_diff,est):
|
def __init__(self,db,obj,hw_diff,est):
|
||||||
FamilyRule.__init__(self,db,obj)
|
FamilyRule.__init__(self,db,obj)
|
||||||
self.hw_diff = hw_diff
|
self.hw_diff = hw_diff
|
||||||
@ -956,6 +906,7 @@ class LargeAgeGapFamily(FamilyRule):
|
|||||||
|
|
||||||
class MarriageBeforeBirth(FamilyRule):
|
class MarriageBeforeBirth(FamilyRule):
|
||||||
ID = 18
|
ID = 18
|
||||||
|
SEVERITY = Rule.ERROR
|
||||||
def __init__(self,db,obj,est):
|
def __init__(self,db,obj,est):
|
||||||
FamilyRule.__init__(self,db,obj)
|
FamilyRule.__init__(self,db,obj)
|
||||||
self.est = est
|
self.est = est
|
||||||
@ -983,6 +934,7 @@ class MarriageBeforeBirth(FamilyRule):
|
|||||||
|
|
||||||
class MarriageAfterDeath(FamilyRule):
|
class MarriageAfterDeath(FamilyRule):
|
||||||
ID = 19
|
ID = 19
|
||||||
|
SEVERITY = Rule.ERROR
|
||||||
def __init__(self,db,obj,est):
|
def __init__(self,db,obj,est):
|
||||||
FamilyRule.__init__(self,db,obj)
|
FamilyRule.__init__(self,db,obj)
|
||||||
self.est = est
|
self.est = est
|
||||||
@ -1010,6 +962,7 @@ class MarriageAfterDeath(FamilyRule):
|
|||||||
|
|
||||||
class EarlyMarriage(FamilyRule):
|
class EarlyMarriage(FamilyRule):
|
||||||
ID = 20
|
ID = 20
|
||||||
|
SEVERITY = Rule.WARNING
|
||||||
def __init__(self,db,obj,yng_mar,est):
|
def __init__(self,db,obj,yng_mar,est):
|
||||||
FamilyRule.__init__(self,db,obj)
|
FamilyRule.__init__(self,db,obj)
|
||||||
self.yng_mar = yng_mar
|
self.yng_mar = yng_mar
|
||||||
@ -1038,6 +991,7 @@ class EarlyMarriage(FamilyRule):
|
|||||||
|
|
||||||
class LateMarriage(FamilyRule):
|
class LateMarriage(FamilyRule):
|
||||||
ID = 21
|
ID = 21
|
||||||
|
SEVERITY = Rule.WARNING
|
||||||
def __init__(self,db,obj,old_mar,est):
|
def __init__(self,db,obj,old_mar,est):
|
||||||
FamilyRule.__init__(self,db,obj)
|
FamilyRule.__init__(self,db,obj)
|
||||||
self.old_mar = old_mar
|
self.old_mar = old_mar
|
||||||
@ -1085,6 +1039,7 @@ class LateMarriage(FamilyRule):
|
|||||||
|
|
||||||
class OldParent(FamilyRule):
|
class OldParent(FamilyRule):
|
||||||
ID = 22
|
ID = 22
|
||||||
|
SEVERITY = Rule.WARNING
|
||||||
def __init__(self,db,obj,old_mom,old_dad,est):
|
def __init__(self,db,obj,old_mom,old_dad,est):
|
||||||
FamilyRule.__init__(self,db,obj)
|
FamilyRule.__init__(self,db,obj)
|
||||||
self.old_mom = old_mom
|
self.old_mom = old_mom
|
||||||
@ -1126,6 +1081,7 @@ class OldParent(FamilyRule):
|
|||||||
|
|
||||||
class YoungParent(FamilyRule):
|
class YoungParent(FamilyRule):
|
||||||
ID = 23
|
ID = 23
|
||||||
|
SEVERITY = Rule.WARNING
|
||||||
def __init__(self,db,obj,yng_mom,yng_dad,est):
|
def __init__(self,db,obj,yng_mom,yng_dad,est):
|
||||||
FamilyRule.__init__(self,db,obj)
|
FamilyRule.__init__(self,db,obj)
|
||||||
self.yng_dad = yng_dad
|
self.yng_dad = yng_dad
|
||||||
@ -1167,6 +1123,7 @@ class YoungParent(FamilyRule):
|
|||||||
|
|
||||||
class UnbornParent(FamilyRule):
|
class UnbornParent(FamilyRule):
|
||||||
ID = 24
|
ID = 24
|
||||||
|
SEVERITY = Rule.ERROR
|
||||||
def __init__(self,db,obj,est):
|
def __init__(self,db,obj,est):
|
||||||
FamilyRule.__init__(self,db,obj)
|
FamilyRule.__init__(self,db,obj)
|
||||||
self.est = est
|
self.est = est
|
||||||
@ -1205,6 +1162,7 @@ class UnbornParent(FamilyRule):
|
|||||||
|
|
||||||
class DeadParent(FamilyRule):
|
class DeadParent(FamilyRule):
|
||||||
ID = 25
|
ID = 25
|
||||||
|
SEVERITY = Rule.ERROR
|
||||||
def __init__(self,db,obj,est):
|
def __init__(self,db,obj,est):
|
||||||
FamilyRule.__init__(self,db,obj)
|
FamilyRule.__init__(self,db,obj)
|
||||||
self.est = est
|
self.est = est
|
||||||
@ -1243,6 +1201,7 @@ class DeadParent(FamilyRule):
|
|||||||
|
|
||||||
class LargeChildrenSpan(FamilyRule):
|
class LargeChildrenSpan(FamilyRule):
|
||||||
ID = 26
|
ID = 26
|
||||||
|
SEVERITY = Rule.WARNING
|
||||||
def __init__(self,db,obj,cb_span,est):
|
def __init__(self,db,obj,cb_span,est):
|
||||||
FamilyRule.__init__(self,db,obj)
|
FamilyRule.__init__(self,db,obj)
|
||||||
self.cb_span = cb_span
|
self.cb_span = cb_span
|
||||||
@ -1260,6 +1219,7 @@ class LargeChildrenSpan(FamilyRule):
|
|||||||
|
|
||||||
class LargeChildrenAgeDiff(FamilyRule):
|
class LargeChildrenAgeDiff(FamilyRule):
|
||||||
ID = 27
|
ID = 27
|
||||||
|
SEVERITY = Rule.WARNING
|
||||||
def __init__(self,db,obj,c_space,est):
|
def __init__(self,db,obj,c_space,est):
|
||||||
FamilyRule.__init__(self,db,obj)
|
FamilyRule.__init__(self,db,obj)
|
||||||
self.c_space = c_space
|
self.c_space = c_space
|
||||||
|
@ -1124,9 +1124,10 @@
|
|||||||
|
|
||||||
<child>
|
<child>
|
||||||
<widget class="GtkVBox" id="vbox5">
|
<widget class="GtkVBox" id="vbox5">
|
||||||
|
<property name="border_width">6</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="homogeneous">False</property>
|
<property name="homogeneous">False</property>
|
||||||
<property name="spacing">0</property>
|
<property name="spacing">6</property>
|
||||||
|
|
||||||
<child>
|
<child>
|
||||||
<widget class="GtkLabel" id="title">
|
<widget class="GtkLabel" id="title">
|
||||||
@ -1154,27 +1155,107 @@
|
|||||||
</child>
|
</child>
|
||||||
|
|
||||||
<child>
|
<child>
|
||||||
<widget class="GtkScrolledWindow" id="scrolledwindow2">
|
<widget class="GtkHBox" id="hbox1">
|
||||||
<property name="border_width">6</property>
|
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="homogeneous">False</property>
|
||||||
<property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
|
<property name="spacing">0</property>
|
||||||
<property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
|
|
||||||
<property name="shadow_type">GTK_SHADOW_IN</property>
|
|
||||||
<property name="window_placement">GTK_CORNER_TOP_LEFT</property>
|
|
||||||
|
|
||||||
<child>
|
<child>
|
||||||
<widget class="GtkTreeView" id="warn_tree">
|
<widget class="GtkScrolledWindow" id="scrolledwindow4">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="headers_visible">True</property>
|
<property name="hscrollbar_policy">GTK_POLICY_ALWAYS</property>
|
||||||
<property name="rules_hint">True</property>
|
<property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property>
|
||||||
<property name="reorderable">False</property>
|
<property name="shadow_type">GTK_SHADOW_NONE</property>
|
||||||
<property name="enable_search">True</property>
|
<property name="window_placement">GTK_CORNER_TOP_LEFT</property>
|
||||||
<property name="fixed_height_mode">False</property>
|
|
||||||
<property name="hover_selection">False</property>
|
<child>
|
||||||
<property name="hover_expand">False</property>
|
<widget class="GtkTreeView" id="warn_tree">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="headers_visible">True</property>
|
||||||
|
<property name="rules_hint">True</property>
|
||||||
|
<property name="reorderable">False</property>
|
||||||
|
<property name="enable_search">True</property>
|
||||||
|
<property name="fixed_height_mode">False</property>
|
||||||
|
<property name="hover_selection">False</property>
|
||||||
|
<property name="hover_expand">False</property>
|
||||||
|
</widget>
|
||||||
|
</child>
|
||||||
</widget>
|
</widget>
|
||||||
|
<packing>
|
||||||
|
<property name="padding">0</property>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
|
||||||
|
<child>
|
||||||
|
<widget class="GtkVBox" id="vbox7">
|
||||||
|
<property name="border_width">6</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="homogeneous">False</property>
|
||||||
|
<property name="spacing">6</property>
|
||||||
|
|
||||||
|
<child>
|
||||||
|
<widget class="GtkButton" id="hide_sel_button">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="tooltip" translatable="yes">Mark selected rows as ignored</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||||
|
<property name="focus_on_click">True</property>
|
||||||
|
|
||||||
|
<child>
|
||||||
|
<widget class="GtkImage" id="image5">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="stock">gtk-delete</property>
|
||||||
|
<property name="icon_size">4</property>
|
||||||
|
<property name="xalign">0.5</property>
|
||||||
|
<property name="yalign">0.5</property>
|
||||||
|
<property name="xpad">0</property>
|
||||||
|
<property name="ypad">0</property>
|
||||||
|
</widget>
|
||||||
|
</child>
|
||||||
|
</widget>
|
||||||
|
<packing>
|
||||||
|
<property name="padding">0</property>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">False</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
|
||||||
|
<child>
|
||||||
|
<widget class="GtkButton" id="hide_all_button">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="tooltip" translatable="yes">Mark all rows as ignored</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||||
|
<property name="focus_on_click">True</property>
|
||||||
|
|
||||||
|
<child>
|
||||||
|
<widget class="GtkImage" id="image4">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="stock">gtk-clear</property>
|
||||||
|
<property name="icon_size">4</property>
|
||||||
|
<property name="xalign">0.5</property>
|
||||||
|
<property name="yalign">0.5</property>
|
||||||
|
<property name="xpad">0</property>
|
||||||
|
<property name="ypad">0</property>
|
||||||
|
</widget>
|
||||||
|
</child>
|
||||||
|
</widget>
|
||||||
|
<packing>
|
||||||
|
<property name="padding">0</property>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">False</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</widget>
|
||||||
|
<packing>
|
||||||
|
<property name="padding">0</property>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</widget>
|
</widget>
|
||||||
<packing>
|
<packing>
|
||||||
@ -1192,27 +1273,107 @@
|
|||||||
<property name="spacing">0</property>
|
<property name="spacing">0</property>
|
||||||
|
|
||||||
<child>
|
<child>
|
||||||
<widget class="GtkScrolledWindow" id="scrolledwindow3">
|
<widget class="GtkHBox" id="hbox2">
|
||||||
<property name="border_width">6</property>
|
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="homogeneous">False</property>
|
||||||
<property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
|
<property name="spacing">0</property>
|
||||||
<property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
|
|
||||||
<property name="shadow_type">GTK_SHADOW_IN</property>
|
|
||||||
<property name="window_placement">GTK_CORNER_TOP_LEFT</property>
|
|
||||||
|
|
||||||
<child>
|
<child>
|
||||||
<widget class="GtkTreeView" id="hide_tree">
|
<widget class="GtkScrolledWindow" id="scrolledwindow5">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="headers_visible">True</property>
|
<property name="hscrollbar_policy">GTK_POLICY_ALWAYS</property>
|
||||||
<property name="rules_hint">True</property>
|
<property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property>
|
||||||
<property name="reorderable">False</property>
|
<property name="shadow_type">GTK_SHADOW_NONE</property>
|
||||||
<property name="enable_search">True</property>
|
<property name="window_placement">GTK_CORNER_TOP_LEFT</property>
|
||||||
<property name="fixed_height_mode">False</property>
|
|
||||||
<property name="hover_selection">False</property>
|
<child>
|
||||||
<property name="hover_expand">False</property>
|
<widget class="GtkTreeView" id="hide_tree">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="headers_visible">True</property>
|
||||||
|
<property name="rules_hint">True</property>
|
||||||
|
<property name="reorderable">False</property>
|
||||||
|
<property name="enable_search">True</property>
|
||||||
|
<property name="fixed_height_mode">False</property>
|
||||||
|
<property name="hover_selection">False</property>
|
||||||
|
<property name="hover_expand">False</property>
|
||||||
|
</widget>
|
||||||
|
</child>
|
||||||
</widget>
|
</widget>
|
||||||
|
<packing>
|
||||||
|
<property name="padding">0</property>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
|
||||||
|
<child>
|
||||||
|
<widget class="GtkVBox" id="vbox8">
|
||||||
|
<property name="border_width">6</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="homogeneous">False</property>
|
||||||
|
<property name="spacing">6</property>
|
||||||
|
|
||||||
|
<child>
|
||||||
|
<widget class="GtkButton" id="unhide_sel_rows">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="tooltip" translatable="yes">Unmark selected rows to not be ignored</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||||
|
<property name="focus_on_click">True</property>
|
||||||
|
|
||||||
|
<child>
|
||||||
|
<widget class="GtkImage" id="image8">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="stock">gtk-undelete</property>
|
||||||
|
<property name="icon_size">4</property>
|
||||||
|
<property name="xalign">0.5</property>
|
||||||
|
<property name="yalign">0.5</property>
|
||||||
|
<property name="xpad">0</property>
|
||||||
|
<property name="ypad">0</property>
|
||||||
|
</widget>
|
||||||
|
</child>
|
||||||
|
</widget>
|
||||||
|
<packing>
|
||||||
|
<property name="padding">0</property>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">False</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
|
||||||
|
<child>
|
||||||
|
<widget class="GtkButton" id="unhide_all_rows">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="tooltip" translatable="yes">Unmark all rows to not be ignored</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||||
|
<property name="focus_on_click">True</property>
|
||||||
|
|
||||||
|
<child>
|
||||||
|
<widget class="GtkImage" id="image7">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="stock">gtk-clear</property>
|
||||||
|
<property name="icon_size">4</property>
|
||||||
|
<property name="xalign">0.5</property>
|
||||||
|
<property name="yalign">0.5</property>
|
||||||
|
<property name="xpad">0</property>
|
||||||
|
<property name="ypad">0</property>
|
||||||
|
</widget>
|
||||||
|
</child>
|
||||||
|
</widget>
|
||||||
|
<packing>
|
||||||
|
<property name="padding">0</property>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">False</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</widget>
|
||||||
|
<packing>
|
||||||
|
<property name="padding">0</property>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">False</property>
|
||||||
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</widget>
|
</widget>
|
||||||
</child>
|
</child>
|
||||||
|
Loading…
Reference in New Issue
Block a user