Merge pull request #160 from gramps-project/cacheproxydb

CacheProxyDb: adds LRU cache for handle lookups
This commit is contained in:
Doug Blank 2016-05-26 06:58:36 -04:00
commit 6454b87672
3 changed files with 345 additions and 178 deletions

View File

@ -26,3 +26,4 @@ from .filter import FilterProxyDb
from .living import LivingProxyDb from .living import LivingProxyDb
from .private import PrivateProxyDb from .private import PrivateProxyDb
from .referencedbyselection import ReferencedBySelectionProxyDb from .referencedbyselection import ReferencedBySelectionProxyDb
from .cache import CacheProxyDb

180
gramps/gen/proxy/cache.py Normal file
View File

@ -0,0 +1,180 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (c) 2016 Gramps Development Team
#
# 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
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
"""
Proxy class for the Gramps databases. Caches lookups from handles.
"""
class CacheProxyDb:
"""
A Proxy for a database with cached lookups on handles.
Does not invalid caches. Should be used only in read-only
places, and not where caches are altered.
"""
def __init__(self, database):
"""
CacheProxy will cache items based on their handle.
Assumes all handles (regardless of type) are unique.
Database is called self.db for consistency with other
proxies.
"""
self.db = database
self.clear_cache()
def __getattr__(self, attr):
"""
If an attribute isn't found here, use the self.db
version.
"""
return self.db.__getattr__(attr)
def clear_cache(self, handle=None):
"""
Clears all caches if handle is None, or
specific entry.
"""
from gramps.gui.views.treemodels.lru import LRU
if handle:
del self.cache_handle[handle]
else:
self.cache_handle = LRU(100000)
def get_person_from_handle(self, handle):
"""
Gets item from cache if it exists. Converts
handles to string, for uniformity.
"""
if isinstance(handle, bytes):
handle = str(handle, "utf-8")
if handle not in self.cache_handle:
self.cache_handle[handle] = self.db.get_person_from_handle(handle)
return self.cache_handle[handle]
def get_event_from_handle(self, handle):
"""
Gets item from cache if it exists. Converts
handles to string, for uniformity.
"""
if isinstance(handle, bytes):
handle = str(handle, "utf-8")
if handle not in self.cache_handle:
self.cache_handle[handle] = self.db.get_event_from_handle(handle)
return self.cache_handle[handle]
def get_family_from_handle(self, handle):
"""
Gets item from cache if it exists. Converts
handles to string, for uniformity.
"""
if isinstance(handle, bytes):
handle = str(handle, "utf-8")
if handle not in self.cache_handle:
self.cache_handle[handle] = self.db.get_family_from_handle(handle)
return self.cache_handle[handle]
def get_repository_from_handle(self, handle):
"""
Gets item from cache if it exists. Converts
handles to string, for uniformity.
"""
if isinstance(handle, bytes):
handle = str(handle, "utf-8")
if handle not in self.cache_handle:
self.cache_handle[handle] = self.db.get_repository_from_handle(handle)
return self.cache_handle[handle]
def get_place_from_handle(self, handle):
"""
Gets item from cache if it exists. Converts
handles to string, for uniformity.
"""
if isinstance(handle, bytes):
handle = str(handle, "utf-8")
if handle not in self.cache_handle:
self.cache_handle[handle] = self.db.get_place_from_handle(handle)
return self.cache_handle[handle]
def get_place_from_handle(self, handle):
"""
Gets item from cache if it exists. Converts
handles to string, for uniformity.
"""
if isinstance(handle, bytes):
handle = str(handle, "utf-8")
if handle not in self.cache_handle:
self.cache_handle[handle] = self.db.get_place_from_handle(handle)
return self.cache_handle[handle]
def get_citation_from_handle(self, handle):
"""
Gets item from cache if it exists. Converts
handles to string, for uniformity.
"""
if isinstance(handle, bytes):
handle = str(handle, "utf-8")
if handle not in self.cache_handle:
self.cache_handle[handle] = self.db.get_citation_from_handle(handle)
return self.cache_handle[handle]
def get_source_from_handle(self, handle):
"""
Gets item from cache if it exists. Converts
handles to string, for uniformity.
"""
if isinstance(handle, bytes):
handle = str(handle, "utf-8")
if handle not in self.cache_handle:
self.cache_handle[handle] = self.db.get_source_from_handle(handle)
return self.cache_handle[handle]
def get_note_from_handle(self, handle):
"""
Gets item from cache if it exists. Converts
handles to string, for uniformity.
"""
if isinstance(handle, bytes):
handle = str(handle, "utf-8")
if handle not in self.cache_handle:
self.cache_handle[handle] = self.db.get_note_from_handle(handle)
return self.cache_handle[handle]
def get_media_from_handle(self, handle):
"""
Gets item from cache if it exists. Converts
handles to string, for uniformity.
"""
if isinstance(handle, bytes):
handle = str(handle, "utf-8")
if handle not in self.cache_handle:
self.cache_handle[handle] = self.db.get_media_from_handle(handle)
return self.cache_handle[handle]
def get_tag_from_handle(self, handle):
"""
Gets item from cache if it exists. Converts
handles to string, for uniformity.
"""
if isinstance(handle, bytes):
handle = str(handle, "utf-8")
if handle not in self.cache_handle:
self.cache_handle[handle] = self.db.get_tag_from_handle(handle)
return self.cache_handle[handle]

View File

@ -125,7 +125,7 @@ from gramps.gen.utils.image import image_size # , resize_to_jpeg_buffer
from gramps.gen.display.name import displayer as _nd from gramps.gen.display.name import displayer as _nd
from gramps.gen.display.place import displayer as _pd from gramps.gen.display.place import displayer as _pd
from gramps.gen.datehandler import displayer as _dd from gramps.gen.datehandler import displayer as _dd
from gramps.gen.proxy import LivingProxyDb from gramps.gen.proxy import CacheProxyDb
from gramps.plugins.lib.libhtmlconst import _CHARACTER_SETS, _CC, _COPY_OPTIONS from gramps.plugins.lib.libhtmlconst import _CHARACTER_SETS, _CC, _COPY_OPTIONS
from gramps.gen.datehandler import get_date from gramps.gen.datehandler import get_date
@ -418,7 +418,6 @@ _KEYPERSON, _KEYPLACE, _KEYEVENT, _ALPHAEVENT = 0, 1, 2, 3
# Web page filename extensions # Web page filename extensions
_WEB_EXT = ['.html', '.htm', '.shtml', '.php', '.php3', '.cgi'] _WEB_EXT = ['.html', '.htm', '.shtml', '.php', '.php3', '.cgi']
_INCLUDE_LIVING_VALUE = LivingProxyDb.MODE_INCLUDE_ALL
_NAME_COL = 3 _NAME_COL = 3
_DEFAULT_MAX_IMG_WIDTH = 800 # resize images that are wider than this _DEFAULT_MAX_IMG_WIDTH = 800 # resize images that are wider than this
@ -536,37 +535,6 @@ def format_date(date):
return val return val
return "" return ""
def sort_on_name_and_grampsid(obj, dbase):
""" Used to sort on name and gramps ID. """
person = dbase.get_person_from_handle(obj)
name = _nd.display(person)
return (name, person.get_gramps_id())
def copy_thumbnail(report, handle, photo, region=None):
"""
Given a handle (and optional region) make (if needed) an
up-to-date cache of a thumbnail, and call report.copy_file
to copy the cached thumbnail to the website.
Return the new path to the image.
"""
to_dir = report.build_path('thumb', handle)
to_path = os.path.join(to_dir, handle) + (
('%d,%d-%d,%d.png' % region) if region else '.png'
)
if photo.get_mime_type():
full_path = media_path_full(report.database, photo.get_path())
from_path = get_thumbnail_path(full_path,
photo.get_mime_type(),
region)
if not os.path.isfile(from_path):
from_path = CSS["Document"]["filename"]
else:
from_path = CSS["Document"]["filename"]
report.copy_file(from_path, to_path)
return to_path
# pylint: disable=unused-variable # pylint: disable=unused-variable
# pylint: disable=unused-argument # pylint: disable=unused-argument
@ -591,7 +559,6 @@ class BasePage:
self.title_str = title self.title_str = title
self.gid = gid self.gid = gid
self.bibli = Bibliography() self.bibli = Bibliography()
self.dbase_ = report.database
self.page_title = "" self.page_title = ""
@ -630,6 +597,44 @@ class BasePage:
""" """
pass pass
def sort_on_name_and_grampsid(self, handle):
""" Used to sort on name and gramps ID. """
person = self.report.database.get_person_from_handle(handle)
name = _nd.display(person)
return (name, person.get_gramps_id())
def sort_on_grampsid(self, event_ref):
"""
Sort on gramps ID
"""
evt = self.report.database.get_event_from_handle(
event_ref.ref)
return evt.get_gramps_id()
def copy_thumbnail(self, handle, photo, region=None):
"""
Given a handle (and optional region) make (if needed) an
up-to-date cache of a thumbnail, and call report.copy_file
to copy the cached thumbnail to the website.
Return the new path to the image.
"""
to_dir = self.report.build_path('thumb', handle)
to_path = os.path.join(to_dir, handle) + (
('%d,%d-%d,%d.png' % region) if region else '.png'
)
if photo.get_mime_type():
full_path = media_path_full(self.report.database, photo.get_path())
from_path = get_thumbnail_path(full_path,
photo.get_mime_type(),
region)
if not os.path.isfile(from_path):
from_path = CSS["Document"]["filename"]
else:
from_path = CSS["Document"]["filename"]
self.report.copy_file(from_path, to_path)
return to_path
def get_nav_menu_hyperlink(self, url_fname, nav_text): def get_nav_menu_hyperlink(self, url_fname, nav_text):
""" """
Returns the navigation menu hyperlink Returns the navigation menu hyperlink
@ -699,7 +704,7 @@ class BasePage:
section += table section += table
for family_handle in family_list: for family_handle in family_list:
family = self.dbase_.get_family_from_handle(family_handle) family = self.report.database.get_family_from_handle(family_handle)
if family: if family:
link = self.family_link( link = self.family_link(
family_handle, family_handle,
@ -719,7 +724,7 @@ class BasePage:
spouse_handle = ReportUtils.find_spouse(individual, spouse_handle = ReportUtils.find_spouse(individual,
family) family)
if spouse_handle: if spouse_handle:
spouse = self.dbase_.get_person_from_handle( spouse = self.report.database.get_person_from_handle(
spouse_handle) spouse_handle)
if spouse: if spouse:
table += self.display_spouse(spouse, family, table += self.display_spouse(spouse, family,
@ -749,7 +754,7 @@ class BasePage:
family.get_mother_handle()]: family.get_mother_handle()]:
person = None person = None
if person_handle: if person_handle:
person = self.dbase_.get_person_from_handle( person = self.report.database.get_person_from_handle(
person_handle) person_handle)
if person: if person:
table += self.display_spouse(person, table += self.display_spouse(person,
@ -783,7 +788,7 @@ class BasePage:
if not self.inc_families: if not self.inc_families:
notelist = family.get_note_list() notelist = family.get_note_list()
for notehandle in notelist: for notehandle in notelist:
note = self.dbase_.get_note_from_handle(notehandle) note = self.report.database.get_note_from_handle(notehandle)
if note: if note:
trow = Html("tr") + ( trow = Html("tr") + (
Html("td", " ", class_="ColumnType", inline=True), Html("td", " ", class_="ColumnType", inline=True),
@ -812,11 +817,11 @@ class BasePage:
# add individual's children event places to family map... # add individual's children event places to family map...
if self.familymappages: if self.familymappages:
for handle in childlist: for handle in childlist:
child = self.dbase_.get_person_from_handle(handle) child = self.report.database.get_person_from_handle(handle)
if child: if child:
self._get_event_place(child, place_lat_long) self._get_event_place(child, place_lat_long)
children = add_birthdate(self.dbase_, childlist) children = add_birthdate(self.report.database, childlist)
if birthorder: if birthorder:
children = sorted(children) children = sorted(children)
@ -875,7 +880,7 @@ class BasePage:
# family event # family event
else: else:
_obj = self.dbase_.get_family_from_handle(handle) _obj = self.report.database.get_family_from_handle(handle)
if _obj: if _obj:
# husband and spouse in this example, # husband and spouse in this example,
@ -1064,7 +1069,7 @@ class BasePage:
place_handle = event.get_place_handle() place_handle = event.get_place_handle()
if place_handle: if place_handle:
place = self.dbase_.get_place_from_handle(place_handle) place = self.report.database.get_place_from_handle(place_handle)
if place: if place:
self.append_to_place_lat_long(place, event, place_lat_long) self.append_to_place_lat_long(place, event, place_lat_long)
@ -1138,7 +1143,7 @@ class BasePage:
# 3 = place handle, 4 = event date, 5 = event type # 3 = place handle, 4 = event date, 5 = event type
found = any(data[3] == place_handle for data in place_lat_long) found = any(data[3] == place_handle for data in place_lat_long)
if not found: if not found:
placetitle = _pd.display(self.dbase_, place) placetitle = _pd.display(self.report.database, place)
latitude = place.get_latitude() latitude = place.get_latitude()
longitude = place.get_longitude() longitude = place.get_longitude()
if latitude and longitude: if latitude and longitude:
@ -1173,11 +1178,11 @@ class BasePage:
evt_ref_list = person.get_event_ref_list() evt_ref_list = person.get_event_ref_list()
if evt_ref_list: if evt_ref_list:
for evt_ref in evt_ref_list: for evt_ref in evt_ref_list:
event = self.dbase_.get_event_from_handle(evt_ref.ref) event = self.report.database.get_event_from_handle(evt_ref.ref)
if event: if event:
place_handle = event.get_place_handle() place_handle = event.get_place_handle()
if place_handle: if place_handle:
place = self.dbase_.get_place_from_handle( place = self.report.database.get_place_from_handle(
place_handle) place_handle)
if place: if place:
self.append_to_place_lat_long(place, event, self.append_to_place_lat_long(place, event,
@ -1222,13 +1227,13 @@ class BasePage:
husband_handle = family.get_father_handle() husband_handle = family.get_father_handle()
if husband_handle: if husband_handle:
husband = self.dbase_.get_person_from_handle(husband_handle) husband = self.report.database.get_person_from_handle(husband_handle)
else: else:
husband = None husband = None
spouse_handle = family.get_mother_handle() spouse_handle = family.get_mother_handle()
if spouse_handle: if spouse_handle:
spouse = self.dbase_.get_person_from_handle(spouse_handle) spouse = self.report.database.get_person_from_handle(spouse_handle)
else: else:
spouse = None spouse = None
@ -1291,7 +1296,7 @@ class BasePage:
table += tbody table += tbody
for evt_ref in event_ref_list: for evt_ref in event_ref_list:
event = self.dbase_.get_event_from_handle(evt_ref.ref) event = self.report.database.get_event_from_handle(evt_ref.ref)
# add event body row # add event body row
tbody += self.display_event_row(event, evt_ref, place_lat_long, tbody += self.display_event_row(event, evt_ref, place_lat_long,
@ -1312,11 +1317,11 @@ class BasePage:
place = None place = None
place_handle = evt.get_place_handle() place_handle = evt.get_place_handle()
if place_handle: if place_handle:
place = self.dbase_.get_place_from_handle(place_handle) place = self.report.database.get_place_from_handle(place_handle)
place_hyper = None place_hyper = None
if place: if place:
place_name = _pd.display(self.dbase_, place, evt.get_date_object()) place_name = _pd.display(self.report.database, place, evt.get_date_object())
place_hyper = self.place_link(place_handle, place_name, place_hyper = self.place_link(place_handle, place_name,
uplink=uplink) uplink=uplink)
@ -1372,9 +1377,9 @@ class BasePage:
place_hyper = " " place_hyper = " "
place_handle = ordobj.get_place_handle() place_handle = ordobj.get_place_handle()
if place_handle: if place_handle:
place = self.dbase_.get_place_from_handle(place_handle) place = self.report.database.get_place_from_handle(place_handle)
if place: if place:
place_title = _pd.display(self.dbase_, place) place_title = _pd.display(self.report.database, place)
place_hyper = self.place_link(place_handle, place_title, place_hyper = self.place_link(place_handle, place_title,
place.get_gramps_id(), uplink=True) place.get_gramps_id(), uplink=True)
@ -2145,7 +2150,7 @@ class BasePage:
# get all of the backlinks to this media object; meaning all of # get all of the backlinks to this media object; meaning all of
# the people, events, places, etc..., that use this image # the people, events, places, etc..., that use this image
_region_items = set() _region_items = set()
for (classname, newhandle) in self.dbase_.find_backlink_handles(handle, for (classname, newhandle) in self.report.database.find_backlink_handles(handle,
include_classes=["Person", "Family", "Event", "Place"]): include_classes=["Person", "Family", "Event", "Place"]):
# for each of the backlinks, get the relevant object from the db # for each of the backlinks, get the relevant object from the db
@ -2158,7 +2163,7 @@ class BasePage:
# Is this a person for whom we have built a page: # Is this a person for whom we have built a page:
if self.report.person_in_webreport(newhandle): if self.report.person_in_webreport(newhandle):
# If so, let's add a link to them: # If so, let's add a link to them:
_obj = self.dbase_.get_person_from_handle(newhandle) _obj = self.report.database.get_person_from_handle(newhandle)
if _obj: if _obj:
# What is the shortest possible name we could use # What is the shortest possible name we could use
# for this person? # for this person?
@ -2169,16 +2174,16 @@ class BasePage:
_linkurl = self.report.build_url_fname_html(_obj.handle, _linkurl = self.report.build_url_fname_html(_obj.handle,
"ppl", True) "ppl", True)
elif classname == "Family": elif classname == "Family":
_obj = self.dbase_.get_family_from_handle(newhandle) _obj = self.report.database.get_family_from_handle(newhandle)
partner1_handle = _obj.get_father_handle() partner1_handle = _obj.get_father_handle()
partner2_handle = _obj.get_mother_handle() partner2_handle = _obj.get_mother_handle()
partner1 = None partner1 = None
partner2 = None partner2 = None
if partner1_handle: if partner1_handle:
partner1 = self.dbase_.get_person_from_handle( partner1 = self.report.database.get_person_from_handle(
partner1_handle) partner1_handle)
if partner2_handle: if partner2_handle:
partner2 = self.dbase_.get_person_from_handle( partner2 = self.report.database.get_person_from_handle(
partner2_handle) partner2_handle)
if partner2 and partner1: if partner2 and partner1:
_name = partner1.get_primary_name().get_first_name() _name = partner1.get_primary_name().get_first_name()
@ -2195,15 +2200,15 @@ class BasePage:
if not _name: if not _name:
_name = _UNKNOWN _name = _UNKNOWN
elif classname == "Event": elif classname == "Event":
_obj = self.dbase_.get_event_from_handle(newhandle) _obj = self.report.database.get_event_from_handle(newhandle)
_name = _obj.get_description() _name = _obj.get_description()
if not _name: if not _name:
_name = _UNKNOWN _name = _UNKNOWN
_linkurl = self.report.build_url_fname_html(_obj.handle, _linkurl = self.report.build_url_fname_html(_obj.handle,
"evt", True) "evt", True)
elif classname == "Place": elif classname == "Place":
_obj = self.dbase_.get_place_from_handle(newhandle) _obj = self.report.database.get_place_from_handle(newhandle)
_name = _pd.display(self.dbase_, _obj) _name = _pd.display(self.report.database, _obj)
if not _name: if not _name:
_name = _UNKNOWN _name = _UNKNOWN
_linkurl = self.report.build_url_fname_html(newhandle, _linkurl = self.report.build_url_fname_html(newhandle,
@ -2290,8 +2295,7 @@ class BasePage:
if region: if region:
# make a thumbnail of this region # make a thumbnail of this region
newpath = copy_thumbnail(self.report, photo_handle, newpath = self.copy_thumbnail(photo_handle, photo, region)
photo, region)
newpath = self.report.build_url_fname(newpath, uplink=True) newpath = self.report.build_url_fname(newpath, uplink=True)
snapshot += self.media_link(photo_handle, newpath, descr, snapshot += self.media_link(photo_handle, newpath, descr,
@ -2578,7 +2582,7 @@ class BasePage:
for citation in citationlist: for citation in citationlist:
cindex += 1 cindex += 1
# Add this source and its references to the page # Add this source and its references to the page
source = self.dbase_.get_source_from_handle( source = self.report.database.get_source_from_handle(
citation.get_source_handle()) citation.get_source_handle())
if source is not None: if source is not None:
if source.get_author(): if source.get_author():
@ -2611,7 +2615,7 @@ class BasePage:
if self.create_media: if self.create_media:
for media_ref in sref.get_media_list(): for media_ref in sref.get_media_list():
media_handle = media_ref.get_reference_handle() media_handle = media_ref.get_reference_handle()
media = self.dbase_.get_media_from_handle( media = self.report.database.get_media_from_handle(
media_handle) media_handle)
if media: if media:
mime_type = media.get_mime_type() mime_type = media.get_mime_type()
@ -2646,7 +2650,7 @@ class BasePage:
usedescr=False), usedescr=False),
inline=True) inline=True)
for handle in sref.get_note_list(): for handle in sref.get_note_list():
this_note = self.dbase_.get_note_from_handle(handle) this_note = self.report.database.get_note_from_handle(handle)
if this_note is not None: if this_note is not None:
tmp += Html("li", tmp += Html("li",
"%s: %s" % ( "%s: %s" % (
@ -2788,7 +2792,7 @@ class BasePage:
# The person is not included in the webreport # The person is not included in the webreport
link = "" link = ""
if person is None: if person is None:
person = self.dbase_.get_person_from_handle(person_handle) person = self.report.database.get_person_from_handle(person_handle)
if person: if person:
name = self.report.get_person_name(person) name = self.report.get_person_name(person)
gid = person.get_gramps_id() gid = person.get_gramps_id()
@ -2938,7 +2942,7 @@ class BasePage:
) )
tbody += trow tbody += trow
mlocation = get_main_location(self.dbase_, place) mlocation = get_main_location(self.report.database, place)
for (label, data) in [ for (label, data) in [
(STREET, mlocation.get(PlaceType.STREET, '')), (STREET, mlocation.get(PlaceType.STREET, '')),
(LOCALITY, mlocation.get(PlaceType.LOCALITY, '')), (LOCALITY, mlocation.get(PlaceType.LOCALITY, '')),
@ -2987,7 +2991,7 @@ class BasePage:
for placeref in place.get_placeref_list(): for placeref in place.get_placeref_list():
place_date = get_date(placeref) place_date = get_date(placeref)
if place_date != "": if place_date != "":
parent_place = self.dbase_.get_place_from_handle(placeref.ref) parent_place = self.report.database.get_place_from_handle(placeref.ref)
parent_name = parent_place.get_name().get_value() parent_name = parent_place.get_name().get_value()
trow = Html('tr') + ( trow = Html('tr') + (
Html("td", LOCATIONS, class_="ColumnAttribute", Html("td", LOCATIONS, class_="ColumnAttribute",
@ -3054,7 +3058,7 @@ class BasePage:
index = 1 index = 1
for repo_ref in repo_ref_list: for repo_ref in repo_ref_list:
repository = self.dbase_.get_repository_from_handle( repository = self.report.database.get_repository_from_handle(
repo_ref.ref) repo_ref.ref)
if repository: if repository:
@ -3278,9 +3282,9 @@ class SurnamePage(BasePage):
table += tbody table += tbody
for person_handle in sorted(ppl_handle_list, for person_handle in sorted(ppl_handle_list,
key=lambda x: sort_on_name_and_grampsid(x, self.dbase_)): key=self.sort_on_name_and_grampsid):
person = self.dbase_.get_person_from_handle(person_handle) person = self.report.database.get_person_from_handle(person_handle)
if person.get_change_time() > ldatec: if person.get_change_time() > ldatec:
ldatec = person.get_change_time() ldatec = person.get_change_time()
trow = Html("tr") trow = Html("tr")
@ -3297,7 +3301,7 @@ class SurnamePage(BasePage):
tcell = Html("td", class_="ColumnBirth", inline=True) tcell = Html("td", class_="ColumnBirth", inline=True)
trow += tcell trow += tcell
birth_date = _find_birth_date(self.dbase_, person) birth_date = _find_birth_date(self.report.database, person)
if birth_date is not None: if birth_date is not None:
if birth_date.fallback: if birth_date.fallback:
tcell += Html('em', _dd.display(birth_date), tcell += Html('em', _dd.display(birth_date),
@ -3312,7 +3316,7 @@ class SurnamePage(BasePage):
tcell = Html("td", class_="ColumnDeath", inline=True) tcell = Html("td", class_="ColumnDeath", inline=True)
trow += tcell trow += tcell
death_date = _find_death_date(self.dbase_, person) death_date = _find_death_date(self.report.database, person)
if death_date is not None: if death_date is not None:
if death_date.fallback: if death_date.fallback:
tcell += Html('em', _dd.display(death_date), tcell += Html('em', _dd.display(death_date),
@ -3330,7 +3334,7 @@ class SurnamePage(BasePage):
first_family = True first_family = True
if family_list: if family_list:
for family_handle in family_list: for family_handle in family_list:
family = self.dbase_.get_family_from_handle( family = self.report.database.get_family_from_handle(
family_handle) family_handle)
partner_handle = ReportUtils.find_spouse(person, partner_handle = ReportUtils.find_spouse(person,
family) family)
@ -3349,18 +3353,18 @@ class SurnamePage(BasePage):
parent_handle_list = person.get_parent_family_handle_list() parent_handle_list = person.get_parent_family_handle_list()
if parent_handle_list: if parent_handle_list:
parent_handle = parent_handle_list[0] parent_handle = parent_handle_list[0]
family = self.dbase_.get_family_from_handle( family = self.report.database.get_family_from_handle(
parent_handle) parent_handle)
father_id = family.get_father_handle() father_id = family.get_father_handle()
mother_id = family.get_mother_handle() mother_id = family.get_mother_handle()
mother = father = None mother = father = None
if father_id: if father_id:
father = self.dbase_.get_person_from_handle( father = self.report.database.get_person_from_handle(
father_id) father_id)
if father: if father:
father_name = self.get_name(father) father_name = self.get_name(father)
if mother_id: if mother_id:
mother = self.dbase_.get_person_from_handle( mother = self.report.database.get_person_from_handle(
mother_id) mother_id)
if mother: if mother:
mother_name = self.get_name(mother) mother_name = self.get_name(mother)
@ -3474,7 +3478,7 @@ class FamilyPages(BasePage):
# because they are not in the original family list. # because they are not in the original family list.
pers_fam_dict = defaultdict(list) pers_fam_dict = defaultdict(list)
for family_handle in fam_list: for family_handle in fam_list:
family = self.dbase_.get_family_from_handle(family_handle) family = self.report.database.get_family_from_handle(family_handle)
if family: if family:
if family.get_change_time() > ldatec: if family.get_change_time() > ldatec:
ldatec = family.get_change_time() ldatec = family.get_change_time()
@ -3486,7 +3490,7 @@ class FamilyPages(BasePage):
pers_fam_dict[spouse_handle].append(family) pers_fam_dict[spouse_handle].append(family)
# add alphabet navigation # add alphabet navigation
index_list = get_first_letters(self.dbase_, pers_fam_dict.keys(), index_list = get_first_letters(self.report.database, pers_fam_dict.keys(),
_KEYPERSON) _KEYPERSON)
alpha_nav = alphabet_navigation(index_list) alpha_nav = alphabet_navigation(index_list)
if alpha_nav: if alpha_nav:
@ -3518,7 +3522,7 @@ class FamilyPages(BasePage):
table += tbody table += tbody
# begin displaying index list # begin displaying index list
ppl_handle_list = sort_people(self.dbase_, pers_fam_dict.keys()) ppl_handle_list = sort_people(self.report.database, pers_fam_dict.keys())
first = True first = True
for (surname, handle_list) in ppl_handle_list: for (surname, handle_list) in ppl_handle_list:
@ -3530,9 +3534,8 @@ class FamilyPages(BasePage):
# get person from sorted database list # get person from sorted database list
for person_handle in sorted(handle_list, for person_handle in sorted(handle_list,
key=lambda x: sort_on_name_and_grampsid(x, key=self.sort_on_name_and_grampsid):
self.dbase_)): person = self.report.database.get_person_from_handle(
person = self.dbase_.get_person_from_handle(
person_handle) person_handle)
if person: if person:
family_list = sorted(pers_fam_dict[person_handle], family_list = sorted(pers_fam_dict[person_handle],
@ -3589,19 +3592,11 @@ class FamilyPages(BasePage):
trow += (tcell1, tcell2) trow += (tcell1, tcell2)
if fam_evt_ref_list: if fam_evt_ref_list:
def sort_on_grampsid(obj):
"""
Sort on gramps ID
"""
evt = self.dbase_.get_event_from_handle(
obj.ref)
return evt.get_gramps_id()
fam_evt_srt_ref_list = sorted( fam_evt_srt_ref_list = sorted(
fam_evt_ref_list, fam_evt_ref_list,
key=lambda x: sort_on_grampsid(x)) key=self.sort_on_grampsid)
for evt_ref in fam_evt_srt_ref_list: for evt_ref in fam_evt_srt_ref_list:
evt = self.dbase_.get_event_from_handle( evt = self.report.database.get_event_from_handle(
evt_ref.ref) evt_ref.ref)
if evt: if evt:
evt_type = evt.get_type() evt_type = evt.get_type()
@ -3672,7 +3667,7 @@ class FamilyPages(BasePage):
# the family event media here # the family event media here
if not self.inc_events: if not self.inc_events:
for evt_ref in family.get_event_ref_list(): for evt_ref in family.get_event_ref_list():
event = self.dbase_.get_event_from_handle(evt_ref.ref) event = self.report.database.get_event_from_handle(evt_ref.ref)
media_list += event.get_media_list() media_list += event.get_media_list()
thumbnail = self.disp_first_img_as_thumbnail(media_list, thumbnail = self.disp_first_img_as_thumbnail(media_list,
family) family)
@ -3806,7 +3801,7 @@ class PlacePages(BasePage):
placelist += Html("p", msg, id="description") placelist += Html("p", msg, id="description")
# begin alphabet navigation # begin alphabet navigation
index_list = get_first_letters(self.dbase_, place_handles, index_list = get_first_letters(self.report.database, place_handles,
_KEYPLACE) _KEYPLACE)
alpha_nav = alphabet_navigation(index_list) alpha_nav = alphabet_navigation(index_list)
if alpha_nav is not None: if alpha_nav is not None:
@ -3837,7 +3832,7 @@ class PlacePages(BasePage):
handle_list = sorted(place_handles, handle_list = sorted(place_handles,
key=lambda x: key=lambda x:
SORT_KEY(ReportUtils.place_name(self.dbase_, x))) SORT_KEY(ReportUtils.place_name(self.report.database, x)))
first = True first = True
# begin table body # begin table body
@ -3845,13 +3840,13 @@ class PlacePages(BasePage):
table += tbody table += tbody
for place_handle in handle_list: for place_handle in handle_list:
place = self.dbase_.get_place_from_handle(place_handle) place = self.report.database.get_place_from_handle(place_handle)
if place: if place:
if place.get_change_time() > ldatec: if place.get_change_time() > ldatec:
ldatec = place.get_change_time() ldatec = place.get_change_time()
place_title = ReportUtils.place_name(self.dbase_, place_title = ReportUtils.place_name(self.report.database,
place_handle) place_handle)
main_location = get_main_location(self.dbase_, place) main_location = get_main_location(self.report.database, place)
if place_title and not place_title.isspace(): if place_title and not place_title.isspace():
letter = get_index_letter(first_letter(place_title), letter = get_index_letter(first_letter(place_title),
@ -3934,7 +3929,7 @@ class PlacePages(BasePage):
output_file, sio = self.report.create_file(place_handle, "plc") output_file, sio = self.report.create_file(place_handle, "plc")
self.uplink = True self.uplink = True
self.page_title = _pd.display(self.dbase_, place) self.page_title = _pd.display(self.report.database, place)
placepage, head, body = self.write_header(_("Places")) placepage, head, body = self.write_header(_("Places"))
self.placemappages = self.report.options['placemappages'] self.placemappages = self.report.options['placemappages']
@ -4136,7 +4131,7 @@ class EventPages(BasePage):
eventlist += Html("p", msg, id="description") eventlist += Html("p", msg, id="description")
# get alphabet navigation... # get alphabet navigation...
index_list = get_first_letters(self.dbase_, event_types, index_list = get_first_letters(self.report.database, event_types,
_ALPHAEVENT) _ALPHAEVENT)
alpha_nav = alphabet_navigation(index_list) alpha_nav = alphabet_navigation(index_list)
if alpha_nav: if alpha_nav:
@ -4169,7 +4164,7 @@ class EventPages(BasePage):
# separate events by their type and then thier event handles # separate events by their type and then thier event handles
for (evt_type, for (evt_type,
data_list) in sort_event_types(self.dbase_, data_list) in sort_event_types(self.report.database,
event_types, event_types,
event_handle_list): event_handle_list):
first = True first = True
@ -4180,7 +4175,7 @@ class EventPages(BasePage):
first_event = True first_event = True
for (sort_value, event_handle) in data_list: for (sort_value, event_handle) in data_list:
event = self.dbase_.get_event_from_handle(event_handle) event = self.report.database.get_event_from_handle(event_handle)
_type = event.get_type() _type = event.get_type()
gid = event.get_gramps_id() gid = event.get_gramps_id()
if event.get_change_time() > ldatec: if event.get_change_time() > ldatec:
@ -4192,13 +4187,13 @@ class EventPages(BasePage):
# family event # family event
if int(_type) in _EVENTMAP: if int(_type) in _EVENTMAP:
handle_list = set( handle_list = set(
self.dbase_.find_backlink_handles( self.report.database.find_backlink_handles(
event_handle, event_handle,
include_classes=['Family', include_classes=['Family',
'Person'])) 'Person']))
else: else:
handle_list = set( handle_list = set(
self.dbase_.find_backlink_handles( self.report.database.find_backlink_handles(
event_handle, event_handle,
include_classes=['Person'])) include_classes=['Person']))
if handle_list: if handle_list:
@ -4478,7 +4473,7 @@ class SurnameListPage(BasePage):
# add alphabet navigation... # add alphabet navigation...
# only if surname list not surname count # only if surname list not surname count
if order_by == self.ORDER_BY_NAME: if order_by == self.ORDER_BY_NAME:
index_list = get_first_letters(self.dbase_, ppl_handle_list, index_list = get_first_letters(self.report.database, ppl_handle_list,
_KEYPERSON) _KEYPERSON)
alpha_nav = alphabet_navigation(index_list) alpha_nav = alphabet_navigation(index_list)
if alpha_nav is not None: if alpha_nav is not None:
@ -4522,7 +4517,7 @@ class SurnameListPage(BasePage):
with Html("tbody") as tbody: with Html("tbody") as tbody:
table += tbody table += tbody
ppl_handle_list = sort_people(self.dbase_, ppl_handle_list) ppl_handle_list = sort_people(self.report.database, ppl_handle_list)
if order_by == self.ORDER_BY_COUNT: if order_by == self.ORDER_BY_COUNT:
temp_list = {} temp_list = {}
for (surname, data_list) in ppl_handle_list: for (surname, data_list) in ppl_handle_list:
@ -4632,7 +4627,7 @@ class IntroductionPage(BasePage):
note_id = report.options['intronote'] note_id = report.options['intronote']
if note_id: if note_id:
note = self.dbase_.get_note_from_gramps_id(note_id) note = self.report.database.get_note_from_gramps_id(note_id)
note_text = self.get_note_format(note, False) note_text = self.get_note_format(note, False)
# attach note # attach note
@ -4676,7 +4671,7 @@ class HomePage(BasePage):
note_id = report.options['homenote'] note_id = report.options['homenote']
if note_id: if note_id:
note = self.dbase_.get_note_from_gramps_id(note_id) note = self.report.database.get_note_from_gramps_id(note_id)
note_text = self.get_note_format(note, False) note_text = self.get_note_format(note, False)
# attach note # attach note
@ -4786,7 +4781,7 @@ class SourcePages(BasePage):
# Sort the sources # Sort the sources
for handle in source_handles: for handle in source_handles:
source = self.dbase_.get_source_from_handle(handle) source = self.report.database.get_source_from_handle(handle)
if source is not None: if source is not None:
key = source.get_title() + source.get_author() key = source.get_title() + source.get_author()
key += str(source.get_gramps_id()) key += str(source.get_gramps_id())
@ -5074,7 +5069,7 @@ class MediaPages(BasePage):
index = 1 index = 1
for media_handle in sorted_media_handles: for media_handle in sorted_media_handles:
media = self.dbase_.get_media_from_handle(media_handle) media = self.report.database.get_media_from_handle(media_handle)
if media: if media:
if media.get_change_time() > ldatec: if media.get_change_time() > ldatec:
ldatec = media.get_change_time() ldatec = media.get_change_time()
@ -5106,7 +5101,7 @@ class MediaPages(BasePage):
unused_media_handles = [] unused_media_handles = []
if self.create_unused_media: if self.create_unused_media:
# add unused media # add unused media
media_list = self.dbase_.get_media_handles() media_list = self.report.database.get_media_handles()
for media_ref in media_list: for media_ref in media_list:
if isinstance(media_ref, bytes): if isinstance(media_ref, bytes):
media_handle = media_ref.decode("utf-8") media_handle = media_ref.decode("utf-8")
@ -5133,7 +5128,7 @@ class MediaPages(BasePage):
Html("td", Html("h4", " "), inline=True) Html("td", Html("h4", " "), inline=True)
) )
for media_handle in unused_media_handles: for media_handle in unused_media_handles:
media = self.dbase_.get_media_from_handle(media_handle) media = self.report.database.get_media_from_handle(media_handle)
gc.collect() # Reduce memory usage when many images. gc.collect() # Reduce memory usage when many images.
next_ = None if indx == total else \ next_ = None if indx == total else \
unused_media_handles[indx] unused_media_handles[indx]
@ -5222,7 +5217,7 @@ class MediaPages(BasePage):
#note_only = True #note_only = True
target_exists = False target_exists = False
copy_thumbnail(self.report, media_handle, media) self.copy_thumbnail(media_handle, media)
self.page_title = media.get_description() self.page_title = media.get_description()
(mediapage, head, (mediapage, head,
body) = self.write_header("%s - %s" % (_("Media"), body) = self.write_header("%s - %s" % (_("Media"),
@ -5280,7 +5275,7 @@ class MediaPages(BasePage):
# the user to have to await a large download # the user to have to await a large download
# unnecessarily. Either way, set the display image # unnecessarily. Either way, set the display image
# size as requested. # size as requested.
orig_image_path = media_path_full(self.dbase_, orig_image_path = media_path_full(self.report.database,
media.get_path()) media.get_path())
#mtime = os.stat(orig_image_path).st_mtime #mtime = os.stat(orig_image_path).st_mtime
(width, height) = image_size(orig_image_path) (width, height) = image_size(orig_image_path)
@ -5339,7 +5334,7 @@ class MediaPages(BasePage):
dirname = tempfile.mkdtemp() dirname = tempfile.mkdtemp()
thmb_path = os.path.join(dirname, "document.png") thmb_path = os.path.join(dirname, "document.png")
if run_thumbnailer(mime_type, if run_thumbnailer(mime_type,
media_path_full(self.dbase_, media_path_full(self.report.database,
media.get_path()), media.get_path()),
thmb_path, 320): thmb_path, 320):
try: try:
@ -5492,7 +5487,7 @@ class MediaPages(BasePage):
to_dir = self.report.build_path('images', handle) to_dir = self.report.build_path('images', handle)
newpath = os.path.join(to_dir, handle) + ext newpath = os.path.join(to_dir, handle) + ext
fullpath = media_path_full(self.dbase_, photo.get_path()) fullpath = media_path_full(self.report.database, photo.get_path())
if not os.path.isfile(fullpath): if not os.path.isfile(fullpath):
_WRONGMEDIAPATH.append([photo.get_gramps_id(), fullpath]) _WRONGMEDIAPATH.append([photo.get_gramps_id(), fullpath])
return None return None
@ -5538,11 +5533,11 @@ class ThumbnailPreviewPage(BasePage):
self.photo_keys = sorted(self.report.obj_dict[Media], self.photo_keys = sorted(self.report.obj_dict[Media],
key=lambda x: sort_by_desc_and_gid( key=lambda x: sort_by_desc_and_gid(
self.dbase_.get_media_from_handle(x))) self.report.database.get_media_from_handle(x)))
if self.create_unused_media: if self.create_unused_media:
# add unused media # add unused media
media_list = self.dbase_.get_media_handles() media_list = self.report.database.get_media_handles()
unused_media_handles = [] unused_media_handles = []
for media_ref in media_list: for media_ref in media_list:
if isinstance(media_ref, bytes): if isinstance(media_ref, bytes):
@ -5554,14 +5549,14 @@ class ThumbnailPreviewPage(BasePage):
media_list = [] media_list = []
for person_handle in self.photo_keys: for person_handle in self.photo_keys:
photo = self.dbase_.get_media_from_handle(person_handle) photo = self.report.database.get_media_from_handle(person_handle)
if photo: if photo:
if photo.get_mime_type().startswith("image"): if photo.get_mime_type().startswith("image"):
media_list.append((photo.get_description(), person_handle, media_list.append((photo.get_description(), person_handle,
photo)) photo))
if self.create_thumbs_only: if self.create_thumbs_only:
copy_thumbnail(self.report, person_handle, photo) self.copy_thumbnail(person_handle, photo)
media_list.sort(key=lambda x: SORT_KEY(x[0])) media_list.sort(key=lambda x: SORT_KEY(x[0]))
@ -5929,7 +5924,7 @@ class ContactPage(BasePage):
note_id = report.options['contactnote'] note_id = report.options['contactnote']
if note_id: if note_id:
note = self.dbase_.get_note_from_gramps_id(note_id) note = self.report.database.get_note_from_gramps_id(note_id)
note_text = self.get_note_format(note, False) note_text = self.get_note_format(note, False)
# attach note # attach note
@ -6039,7 +6034,7 @@ class PersonPages(BasePage):
individuallist += Html("p", msg, id="description") individuallist += Html("p", msg, id="description")
# add alphabet navigation # add alphabet navigation
index_list = get_first_letters(self.dbase_, ppl_handle_list, index_list = get_first_letters(self.report.database, ppl_handle_list,
_KEYPERSON) _KEYPERSON)
alpha_nav = alphabet_navigation(index_list) alpha_nav = alphabet_navigation(index_list)
if alpha_nav is not None: if alpha_nav is not None:
@ -6080,7 +6075,7 @@ class PersonPages(BasePage):
tbody = Html("tbody") tbody = Html("tbody")
table += tbody table += tbody
ppl_handle_list = sort_people(self.dbase_, ppl_handle_list) ppl_handle_list = sort_people(self.report.database, ppl_handle_list)
first = True first = True
for (surname, handle_list) in ppl_handle_list: for (surname, handle_list) in ppl_handle_list:
@ -6092,8 +6087,8 @@ class PersonPages(BasePage):
first_surname = True first_surname = True
for person_handle in sorted(handle_list, for person_handle in sorted(handle_list,
key=lambda x: sort_on_name_and_grampsid(x, self.dbase_)): key=self.sort_on_name_and_grampsid):
person = self.dbase_.get_person_from_handle(person_handle) person = self.report.database.get_person_from_handle(person_handle)
if person.get_change_time() > date: if person.get_change_time() > date:
date = person.get_change_time() date = person.get_change_time()
@ -6132,7 +6127,7 @@ class PersonPages(BasePage):
tcell = Html("td", class_="ColumnBirth", inline=True) tcell = Html("td", class_="ColumnBirth", inline=True)
trow += tcell trow += tcell
birth_date = _find_birth_date(self.dbase_, person) birth_date = _find_birth_date(self.report.database, person)
if birth_date is not None: if birth_date is not None:
if birth_date.fallback: if birth_date.fallback:
tcell += Html('em', _dd.display(birth_date), tcell += Html('em', _dd.display(birth_date),
@ -6147,7 +6142,7 @@ class PersonPages(BasePage):
tcell = Html("td", class_="ColumnDeath", inline=True) tcell = Html("td", class_="ColumnDeath", inline=True)
trow += tcell trow += tcell
death_date = _find_death_date(self.dbase_, person) death_date = _find_death_date(self.report.database, person)
if death_date is not None: if death_date is not None:
if death_date.fallback: if death_date.fallback:
tcell += Html('em', _dd.display(death_date), tcell += Html('em', _dd.display(death_date),
@ -6166,7 +6161,7 @@ class PersonPages(BasePage):
tcell = () tcell = ()
if family_list: if family_list:
for family_handle in family_list: for family_handle in family_list:
family = self.dbase_.get_family_from_handle( family = self.report.database.get_family_from_handle(
family_handle) family_handle)
partner_handle = ReportUtils.find_spouse(person, partner_handle = ReportUtils.find_spouse(person,
family) family)
@ -6197,17 +6192,17 @@ class PersonPages(BasePage):
parent_handle_list = person.get_parent_family_handle_list() parent_handle_list = person.get_parent_family_handle_list()
if parent_handle_list: if parent_handle_list:
parent_handle = parent_handle_list[0] parent_handle = parent_handle_list[0]
family = self.dbase_.get_family_from_handle( family = self.report.database.get_family_from_handle(
parent_handle) parent_handle)
father_handle = family.get_father_handle() father_handle = family.get_father_handle()
mother_handle = family.get_mother_handle() mother_handle = family.get_mother_handle()
if father_handle: if father_handle:
father = self.dbase_.get_person_from_handle( father = self.report.database.get_person_from_handle(
father_handle) father_handle)
else: else:
father = None father = None
if mother_handle: if mother_handle:
mother = self.dbase_.get_person_from_handle( mother = self.report.database.get_person_from_handle(
mother_handle) mother_handle)
else: else:
mother = None mother = None
@ -6353,11 +6348,11 @@ class PersonPages(BasePage):
# Individual Pages... # Individual Pages...
if not self.inc_families: if not self.inc_families:
for handle in self.person.get_family_handle_list(): for handle in self.person.get_family_handle_list():
family = self.dbase_.get_family_from_handle(handle) family = self.report.database.get_family_from_handle(handle)
if family: if family:
media_list += family.get_media_list() media_list += family.get_media_list()
for evt_ref in family.get_event_ref_list(): for evt_ref in family.get_event_ref_list():
event = self.dbase_.get_event_from_handle( event = self.report.database.get_event_from_handle(
evt_ref.ref) evt_ref.ref)
media_list += event.get_media_list() media_list += event.get_media_list()
@ -6366,7 +6361,7 @@ class PersonPages(BasePage):
# Individual Pages... # Individual Pages...
if not self.inc_events: if not self.inc_events:
for evt_ref in self.person.get_primary_event_ref_list(): for evt_ref in self.person.get_primary_event_ref_list():
event = self.dbase_.get_event_from_handle(evt_ref.ref) event = self.report.database.get_event_from_handle(evt_ref.ref)
if event: if event:
media_list += event.get_media_list() media_list += event.get_media_list()
@ -6784,15 +6779,14 @@ class PersonPages(BasePage):
photolist = person.get_media_list() photolist = person.get_media_list()
if photolist: if photolist:
photo_handle = photolist[0].get_reference_handle() photo_handle = photolist[0].get_reference_handle()
photo = self.dbase_.get_media_from_handle(photo_handle) photo = self.report.database.get_media_from_handle(photo_handle)
mime_type = photo.get_mime_type() mime_type = photo.get_mime_type()
if mime_type: if mime_type:
region = self.media_ref_region_to_object(photo_handle, region = self.media_ref_region_to_object(photo_handle,
person) person)
if region: if region:
# make a thumbnail of this region # make a thumbnail of this region
newpath = copy_thumbnail(self.report, photo_handle, newpath = self.copy_thumbnail(photo_handle, photo, region)
photo, region)
# TODO. Check if build_url_fname can be used. # TODO. Check if build_url_fname can be used.
newpath = "/".join(['..']*3 + [newpath]) newpath = "/".join(['..']*3 + [newpath])
if win(): if win():
@ -6871,7 +6865,7 @@ class PersonPages(BasePage):
box = [] box = []
if not handle: if not handle:
return box return box
person = self.dbase_.get_person_from_handle(handle) person = self.report.database.get_person_from_handle(handle)
box = self.draw_box(center2, col, person) box = self.draw_box(center2, col, person)
box += self.connect_line(center1, center2, col) box += self.connect_line(center1, center2, col)
return box return box
@ -6918,7 +6912,7 @@ class PersonPages(BasePage):
return tree return tree
gen_offset = int(max_size / pow(2, gen_nr+1)) gen_offset = int(max_size / pow(2, gen_nr+1))
if person_handle: if person_handle:
person = self.dbase_.get_person_from_handle(person_handle) person = self.report.database.get_person_from_handle(person_handle)
else: else:
person = None person = None
if not person: if not person:
@ -6938,7 +6932,7 @@ class PersonPages(BasePage):
line_offset = _XOFFSET + gen_nr*_WIDTH + (gen_nr-1)*_HGAP line_offset = _XOFFSET + gen_nr*_WIDTH + (gen_nr-1)*_HGAP
tree += self.extend_line(new_center, line_offset) tree += self.extend_line(new_center, line_offset)
family = self.dbase_.get_family_from_handle(family_handle) family = self.report.database.get_family_from_handle(family_handle)
f_center = new_center-gen_offset f_center = new_center-gen_offset
f_handle = family.get_father_handle() f_handle = family.get_father_handle()
@ -7026,7 +7020,7 @@ class PersonPages(BasePage):
childlist = family.get_child_ref_list() childlist = family.get_child_ref_list()
childlist = [child_ref.ref for child_ref in childlist] childlist = [child_ref.ref for child_ref in childlist]
children = add_birthdate(self.dbase_, childlist) children = add_birthdate(self.report.database, childlist)
if birthorder: if birthorder:
children = sorted(children) children = sorted(children)
@ -7035,7 +7029,7 @@ class PersonPages(BasePage):
if handle == self.person.get_handle(): if handle == self.person.get_handle():
child_ped(ol_html) child_ped(ol_html)
elif handle: elif handle:
child = self.dbase_.get_person_from_handle(handle) child = self.report.database.get_person_from_handle(handle)
if child: if child:
ol_html += Html("li") + self.pedigree_person(child) ol_html += Html("li") + self.pedigree_person(child)
else: else:
@ -7058,15 +7052,15 @@ class PersonPages(BasePage):
parent_handle_list = self.person.get_parent_family_handle_list() parent_handle_list = self.person.get_parent_family_handle_list()
if parent_handle_list: if parent_handle_list:
parent_handle = parent_handle_list[0] parent_handle = parent_handle_list[0]
family = self.dbase_.get_family_from_handle(parent_handle) family = self.report.database.get_family_from_handle(parent_handle)
father_handle = family.get_father_handle() father_handle = family.get_father_handle()
mother_handle = family.get_mother_handle() mother_handle = family.get_mother_handle()
if mother_handle: if mother_handle:
mother = self.dbase_.get_person_from_handle(mother_handle) mother = self.report.database.get_person_from_handle(mother_handle)
else: else:
mother = None mother = None
if father_handle: if father_handle:
father = self.dbase_.get_person_from_handle(father_handle) father = self.report.database.get_person_from_handle(father_handle)
else: else:
father = None father = None
else: else:
@ -7153,7 +7147,7 @@ class PersonPages(BasePage):
unordered = Html("ul") unordered = Html("ul")
for notehandle in notelist: for notehandle in notelist:
note = self.dbase_.get_note_from_handle(notehandle) note = self.report.database.get_note_from_handle(notehandle)
if note: if note:
note_text = self.get_note_format(note, True) note_text = self.get_note_format(note, True)
@ -7216,14 +7210,14 @@ class PersonPages(BasePage):
birth_date = Date.EMPTY birth_date = Date.EMPTY
birth_ref = self.person.get_birth_ref() birth_ref = self.person.get_birth_ref()
if birth_ref: if birth_ref:
birth = self.dbase_.get_event_from_handle(birth_ref.ref) birth = self.report.database.get_event_from_handle(birth_ref.ref)
if birth: if birth:
birth_date = birth.get_date_object() birth_date = birth.get_date_object()
if birth_date and birth_date is not Date.EMPTY: if birth_date and birth_date is not Date.EMPTY:
alive = probably_alive(self.person, self.dbase_, Today()) alive = probably_alive(self.person, self.report.database, Today())
death_date = _find_death_date(self.dbase_, self.person) death_date = _find_death_date(self.report.database, self.person)
if not alive and death_date is not None: if not alive and death_date is not None:
nyears = death_date - birth_date nyears = death_date - birth_date
nyears.format(precision=3) nyears.format(precision=3)
@ -7269,7 +7263,7 @@ class PersonPages(BasePage):
table += tbody table += tbody
for evt_ref in event_ref_list: for evt_ref in event_ref_list:
event = self.dbase_.get_event_from_handle(evt_ref.ref) event = self.report.database.get_event_from_handle(evt_ref.ref)
if event: if event:
# display event row # display event row
@ -7359,7 +7353,7 @@ class PersonPages(BasePage):
for child_ref in family.get_child_ref_list(): for child_ref in family.get_child_ref_list():
child_handle = child_ref.ref child_handle = child_ref.ref
child = self.dbase_.get_person_from_handle(child_handle) child = self.report.database.get_person_from_handle(child_handle)
if child: if child:
if child == self.person: if child == self.person:
reln = "" reln = ""
@ -7370,7 +7364,7 @@ class PersonPages(BasePage):
# routines to work. Depending on your definition of # routines to work. Depending on your definition of
# sibling, we cannot necessarily guarantee that. # sibling, we cannot necessarily guarantee that.
sibling_type = self.rel_class.get_sibling_type( sibling_type = self.rel_class.get_sibling_type(
self.dbase_, self.person, child) self.report.database, self.person, child)
reln = self.rel_class.get_sibling_relationship_string( reln = self.rel_class.get_sibling_relationship_string(
sibling_type, self.person.gender, sibling_type, self.person.gender,
@ -7416,10 +7410,10 @@ class PersonPages(BasePage):
@param: table -- The html document to complete @param: table -- The html document to complete
""" """
if parent_handle: if parent_handle:
parent = self.dbase_.get_person_from_handle(parent_handle) parent = self.report.database.get_person_from_handle(parent_handle)
for parent_family_handle in parent.get_family_handle_list(): for parent_family_handle in parent.get_family_handle_list():
if parent_family_handle not in all_family_handles: if parent_family_handle not in all_family_handles:
parent_family = self.dbase_.get_family_from_handle( parent_family = self.report.database.get_family_from_handle(
parent_family_handle) parent_family_handle)
self.display_ind_parent_family(birthmother, birthfather, self.display_ind_parent_family(birthmother, birthfather,
parent_family, table) parent_family, table)
@ -7431,7 +7425,7 @@ class PersonPages(BasePage):
""" """
center_person = self.report.database.get_person_from_gramps_id( center_person = self.report.database.get_person_from_gramps_id(
self.report.options['pid']) self.report.options['pid'])
relationship = self.rel_class.get_one_relationship(self.dbase_, relationship = self.rel_class.get_one_relationship(self.report.database,
self.person, self.person,
center_person) center_person)
if relationship == "": # No relation to display if relationship == "": # No relation to display
@ -7489,11 +7483,11 @@ class PersonPages(BasePage):
all_family_handles = list(parent_list) all_family_handles = list(parent_list)
(birthmother, birthfather) = self.rel_class.get_birth_parents( (birthmother, birthfather) = self.rel_class.get_birth_parents(
self.dbase_, self.person) self.report.database, self.person)
first = True first = True
for family_handle in parent_list: for family_handle in parent_list:
family = self.dbase_.get_family_from_handle(family_handle) family = self.report.database.get_family_from_handle(family_handle)
if family: if family:
# Display this family # Display this family
self.display_ind_parent_family( self.display_ind_parent_family(
@ -7530,10 +7524,10 @@ class PersonPages(BasePage):
""" """
ped = [] ped = []
for family_handle in self.person.get_family_handle_list(): for family_handle in self.person.get_family_handle_list():
rel_family = self.dbase_.get_family_from_handle(family_handle) rel_family = self.report.database.get_family_from_handle(family_handle)
spouse_handle = ReportUtils.find_spouse(self.person, rel_family) spouse_handle = ReportUtils.find_spouse(self.person, rel_family)
if spouse_handle: if spouse_handle:
spouse = self.dbase_.get_person_from_handle(spouse_handle) spouse = self.report.database.get_person_from_handle(spouse_handle)
pedsp = (Html("li", class_="spouse") + pedsp = (Html("li", class_="spouse") +
self.pedigree_person(spouse) self.pedigree_person(spouse)
) )
@ -7545,7 +7539,7 @@ class PersonPages(BasePage):
with Html("ol") as childol: with Html("ol") as childol:
pedsp += [childol] pedsp += [childol]
for child_ref in childlist: for child_ref in childlist:
child = self.dbase_.get_person_from_handle( child = self.report.database.get_person_from_handle(
child_ref.ref) child_ref.ref)
if child: if child:
childol += (Html("li") + childol += (Html("li") +
@ -7979,16 +7973,8 @@ class NavWebReport(Report):
stdoptions.run_private_data_option(self, menu) stdoptions.run_private_data_option(self, menu)
stdoptions.run_living_people_option(self, menu) stdoptions.run_living_people_option(self, menu)
stdoptions.run_private_data_option(self, menu)
livinginfo = self.options['living_people'] self.database = CacheProxyDb(self.database)
yearsafterdeath = self.options['years_past_death']
if livinginfo != _INCLUDE_LIVING_VALUE:
self.database = LivingProxyDb(self.database,
livinginfo,
None,
yearsafterdeath)
filters_option = menu.get_option_by_name('filter') filters_option = menu.get_option_by_name('filter')
self.filter = filters_option.get_filter() self.filter = filters_option.get_filter()
@ -8342,6 +8328,7 @@ class NavWebReport(Report):
@param: bkref_handle -- The handle associated to this person @param: bkref_handle -- The handle associated to this person
""" """
person = self.database.get_person_from_handle(person_handle) person = self.database.get_person_from_handle(person_handle)
if person:
person_name = self.get_person_name(person) person_name = self.get_person_name(person)
person_fname = self.build_url_fname(person_handle, "ppl", person_fname = self.build_url_fname(person_handle, "ppl",
False) + self.ext False) + self.ext
@ -8349,7 +8336,6 @@ class NavWebReport(Report):
person.gramps_id) person.gramps_id)
self.bkref_dict[Person][person_handle].add((bkref_class, bkref_handle)) self.bkref_dict[Person][person_handle].add((bkref_class, bkref_handle))
if person:
############### Header section ############## ############### Header section ##############
for citation_handle in person.get_citation_list(): for citation_handle in person.get_citation_list():
self._add_citation(citation_handle, Person, person_handle) self._add_citation(citation_handle, Person, person_handle)