Some bug fixes on Probably Alive
svn: r14147
This commit is contained in:
parent
30c5030ebe
commit
e16a75f449
72
src/Utils.py
72
src/Utils.py
@ -525,7 +525,7 @@ class ProbablyAlive(object):
|
|||||||
explain = _("birth date")
|
explain = _("birth date")
|
||||||
|
|
||||||
if death_date and birth_date:
|
if death_date and birth_date:
|
||||||
return (birth_date, death_date, explain, "") # direct self evidence
|
return (birth_date, death_date, explain, person) # direct self evidence
|
||||||
|
|
||||||
# Neither birth nor death events are available. Try looking
|
# Neither birth nor death events are available. Try looking
|
||||||
# at siblings. If a sibling was born more than X years past,
|
# at siblings. If a sibling was born more than X years past,
|
||||||
@ -606,6 +606,23 @@ class ProbablyAlive(object):
|
|||||||
date1, date2, explain, other = self.probably_alive_range(mother, is_spouse=True)
|
date1, date2, explain, other = self.probably_alive_range(mother, is_spouse=True)
|
||||||
if date1 and date2:
|
if date1 and date2:
|
||||||
return date1, date2, _("a spouse, ") + explain, other
|
return date1, date2, _("a spouse, ") + explain, other
|
||||||
|
# Let's check the family events and see if we find something
|
||||||
|
for ref in family.get_event_ref_list():
|
||||||
|
if ref:
|
||||||
|
event = self.db.get_event_from_handle(ref.ref)
|
||||||
|
if event:
|
||||||
|
date = event.get_date_object()
|
||||||
|
year = date.get_year()
|
||||||
|
if year != 0:
|
||||||
|
other = None
|
||||||
|
if person.handle == mother_handle and father_handle:
|
||||||
|
other = self.db.get_person_from_handle(father_handle)
|
||||||
|
elif person.handle == father_handle and mother_handle:
|
||||||
|
other = self.db.get_person_from_handle(mother_handle)
|
||||||
|
return (gen.lib.Date().copy_ymd(year - self.AVG_GENERATION_GAP),
|
||||||
|
gen.lib.Date().copy_ymd(year + (self.MAX_AGE_PROB_ALIVE -
|
||||||
|
self.AVG_GENERATION_GAP)),
|
||||||
|
_("event with spouse"), other)
|
||||||
|
|
||||||
# Try looking for descendants that were born more than a lifespan
|
# Try looking for descendants that were born more than a lifespan
|
||||||
# ago.
|
# ago.
|
||||||
@ -798,7 +815,8 @@ def probably_alive(person, db,
|
|||||||
limit=0,
|
limit=0,
|
||||||
max_sib_age_diff=None,
|
max_sib_age_diff=None,
|
||||||
max_age_prob_alive=None,
|
max_age_prob_alive=None,
|
||||||
avg_generation_gap=None):
|
avg_generation_gap=None,
|
||||||
|
return_range=False):
|
||||||
"""
|
"""
|
||||||
Return true if the person may be alive on current_date.
|
Return true if the person may be alive on current_date.
|
||||||
|
|
||||||
@ -815,24 +833,56 @@ def probably_alive(person, db,
|
|||||||
"""
|
"""
|
||||||
pb = ProbablyAlive(db, max_sib_age_diff,
|
pb = ProbablyAlive(db, max_sib_age_diff,
|
||||||
max_age_prob_alive, avg_generation_gap)
|
max_age_prob_alive, avg_generation_gap)
|
||||||
birth, death, explain, relative = pb.probably_alive_range(person, db)
|
birth, death, explain, relative = pb.probably_alive_range(person)
|
||||||
if death is None: # no evidence... can't say if alive/dead
|
if death is None: # no evidence... can't say if alive/dead
|
||||||
return True
|
if return_range:
|
||||||
|
return (True, birth, death, explain, relative)
|
||||||
|
else:
|
||||||
|
return True
|
||||||
# must have est dates
|
# must have est dates
|
||||||
if current_date: # date in which to consider alive
|
if current_date: # date in which to consider alive
|
||||||
# SPECIAL CASE: Today:
|
# SPECIAL CASE: Today:
|
||||||
if current_date.match(gen.lib.date.Today(), "=="):
|
if current_date.match(gen.lib.date.Today(), "=="):
|
||||||
if person.get_death_ref():
|
if person.get_death_ref():
|
||||||
return False
|
if return_range:
|
||||||
|
return (False, birth, death, explain, relative)
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
# if death in the future:
|
||||||
|
if (gen.lib.date.Today() - death)[0] < 0:
|
||||||
|
if return_range:
|
||||||
|
return (True, birth, death, explain, relative)
|
||||||
|
else:
|
||||||
|
return True
|
||||||
|
########### Not today, or today and no death ref:
|
||||||
if limit:
|
if limit:
|
||||||
death += limit # add these years to death
|
death += limit # add these years to death
|
||||||
if death.match(gen.lib.date.Today(), ">"):
|
# if the current - birth is too big, not alive:
|
||||||
return True
|
if (current_date - birth)[0] > max_age_prob_alive:
|
||||||
|
if return_range:
|
||||||
|
return (False, birth, death, explain, relative)
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
# Finally, check to see if current_date is between dates
|
||||||
result = (current_date.match(birth, ">=") and
|
result = (current_date.match(birth, ">=") and
|
||||||
current_date.match(death, "<="))
|
current_date.match(death, "<="))
|
||||||
return result
|
if return_range:
|
||||||
# else, they have a est death date, and no current_date give, thus dead
|
return (result, birth, death, explain, relative)
|
||||||
return False
|
else:
|
||||||
|
return result
|
||||||
|
# Future death:
|
||||||
|
if (gen.lib.date.Today() - death)[0] < 0:
|
||||||
|
if return_range:
|
||||||
|
return (True, birth, death, explain, relative)
|
||||||
|
else:
|
||||||
|
return True
|
||||||
|
# else, they have a est death date, and Today, thus dead
|
||||||
|
else:
|
||||||
|
if return_range:
|
||||||
|
return (False, birth, death, explain, relative)
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
def probably_alive_range(person, db,
|
def probably_alive_range(person, db,
|
||||||
max_sib_age_diff=None,
|
max_sib_age_diff=None,
|
||||||
@ -844,7 +894,7 @@ def probably_alive_range(person, db,
|
|||||||
"""
|
"""
|
||||||
pb = ProbablyAlive(db, max_sib_age_diff,
|
pb = ProbablyAlive(db, max_sib_age_diff,
|
||||||
max_age_prob_alive, avg_generation_gap)
|
max_age_prob_alive, avg_generation_gap)
|
||||||
return pb.probably_alive_range(person, db)
|
return pb.probably_alive_range(person)
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
|
@ -28,6 +28,7 @@ Display references for any object
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
from Simple import SimpleAccess, SimpleDoc, SimpleTable
|
from Simple import SimpleAccess, SimpleDoc, SimpleTable
|
||||||
|
from Utils import probably_alive
|
||||||
from gen.ggettext import gettext as _
|
from gen.ggettext import gettext as _
|
||||||
import DateHandler
|
import DateHandler
|
||||||
import gen.lib
|
import gen.lib
|
||||||
@ -54,26 +55,13 @@ def run(database, document, date):
|
|||||||
stab.columns(_("Person"), _("Age")) # Actual Date makes column unicode
|
stab.columns(_("Person"), _("Age")) # Actual Date makes column unicode
|
||||||
matches = 0
|
matches = 0
|
||||||
for person in sdb.all_people():
|
for person in sdb.all_people():
|
||||||
birth_date = None
|
alive, birth, death, explain, relative = \
|
||||||
birth_str = ""
|
probably_alive(person, database, date, return_range=True)
|
||||||
birth_sort = 0
|
# Doesn't show people probably alive but no way of figuring an age:
|
||||||
birth_ref = gen.lib.Person.get_birth_ref(person)
|
if alive and birth:
|
||||||
birth_date = get_event_date_from_ref(database, birth_ref)
|
diff_span = (date - birth)
|
||||||
death_ref = gen.lib.Person.get_death_ref(person)
|
stab.row(person, str(diff_span))
|
||||||
death_date = get_event_date_from_ref(database, death_ref)
|
stab.row_sort_val(1, int(diff_span))
|
||||||
if birth_date:
|
|
||||||
if (birth_date.get_valid() and birth_date < date and
|
|
||||||
birth_date.get_year() != 0 and
|
|
||||||
((death_date is None) or (death_date > date))):
|
|
||||||
diff_span = (date - birth_date)
|
|
||||||
if ((death_date is not None) or
|
|
||||||
(death_date is None and
|
|
||||||
int(diff_span)/365.0 <= config.get('behavior.max-age-prob-alive'))):
|
|
||||||
birth_str = str(diff_span)
|
|
||||||
birth_sort = int(diff_span)
|
|
||||||
if birth_str != "":
|
|
||||||
stab.row(person, birth_str)
|
|
||||||
stab.row_sort_val(1, diff_span)
|
|
||||||
matches += 1
|
matches += 1
|
||||||
|
|
||||||
sdoc.paragraph(_("\n%d matches.\n") % matches)
|
sdoc.paragraph(_("\n%d matches.\n") % matches)
|
||||||
|
@ -352,6 +352,8 @@ class CalcToolManagedWindow(PluginWindows.ToolManagedWindowBatch):
|
|||||||
date1 = gen.lib.Date()
|
date1 = gen.lib.Date()
|
||||||
if add_death == 1 and not death_ref: # no date
|
if add_death == 1 and not death_ref: # no date
|
||||||
date2 = gen.lib.Date()
|
date2 = gen.lib.Date()
|
||||||
|
if person == other:
|
||||||
|
other = None
|
||||||
stab.row("checkbox",
|
stab.row("checkbox",
|
||||||
person,
|
person,
|
||||||
action,
|
action,
|
||||||
|
Loading…
Reference in New Issue
Block a user