2006-11-28 Don Allingham <don@gramps-project.org>

* src/GrampsDb/_ReadGedcom.py: fix attribute handling
	* src/DisplayModels/_PeopleModel.py: expand caching.



svn: r7729
This commit is contained in:
Don Allingham 2006-11-29 05:29:25 +00:00
parent 092489b862
commit 6dfaa05800
3 changed files with 44 additions and 16 deletions

View File

@ -1,3 +1,7 @@
2006-11-28 Don Allingham <don@gramps-project.org>
* src/GrampsDb/_ReadGedcom.py: fix attribute handling
* src/DisplayModels/_PeopleModel.py: expand caching.
2006-11-28 Brian Matherly <brian@gramps-project.org> 2006-11-28 Brian Matherly <brian@gramps-project.org>
* src/GrampsDb/_GrampsBSDDB.py: fix path for bsddb env in Windows. * src/GrampsDb/_GrampsBSDDB.py: fix path for bsddb env in Windows.
* src/docgen/KwordDoc.py: don't us getuid in Windows * src/docgen/KwordDoc.py: don't us getuid in Windows

View File

@ -68,6 +68,8 @@ import Config
from Filters import SearchFilter from Filters import SearchFilter
from Lru import LRU from Lru import LRU
_CACHE_SIZE = 250
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
# python 2.3 has a bug in the unicode sorting using locale.strcoll. Seems # python 2.3 has a bug in the unicode sorting using locale.strcoll. Seems
@ -153,8 +155,6 @@ class PeopleModel(gtk.GenericTreeModel):
self.sortnames = {} self.sortnames = {}
self.marker_color_column = 10 self.marker_color_column = 10
self.tooltip_column = 11 self.tooltip_column = 11
self.prev_handle = None
self.prev_data = None
self.temp_top_path2iter = [] self.temp_top_path2iter = []
self.iter2path = {} self.iter2path = {}
self.path2iter = {} self.path2iter = {}
@ -244,7 +244,11 @@ class PeopleModel(gtk.GenericTreeModel):
Calculates the new path to node values for the model. Calculates the new path to node values for the model.
""" """
self.lru = LRU(500) self.lru_data = LRU(_CACHE_SIZE)
self.lru_name = LRU(_CACHE_SIZE)
self.lru_bdate = LRU(_CACHE_SIZE)
self.lru_ddate = LRU(_CACHE_SIZE)
if dfilter: if dfilter:
self.dfilter = dfilter self.dfilter = dfilter
self.temp_iter2path = {} self.temp_iter2path = {}
@ -261,11 +265,12 @@ class PeopleModel(gtk.GenericTreeModel):
self.build_sub_entry(name) self.build_sub_entry(name)
def clear_cache(self): def clear_cache(self):
self.lru = LRU(500) self.lru_data = LRU(_CACHE_SIZE)
self.prev_handle = None self.lru_name = LRU(_CACHE_SIZE)
self.lru_bdate = LRU(_CACHE_SIZE)
self.lru_ddate = LRU(_CACHE_SIZE)
def build_sub_entry(self, name): def build_sub_entry(self, name):
self.prev_handle = None
slist = [ (locale.strxfrm(self.sortnames[x]), x) \ slist = [ (locale.strxfrm(self.sortnames[x]), x) \
for x in self.temp_sname_sub[name] ] for x in self.temp_sname_sub[name] ]
slist.sort() slist.sort()
@ -332,11 +337,13 @@ class PeopleModel(gtk.GenericTreeModel):
# return values for 'data' row, calling a function # return values for 'data' row, calling a function
# according to column_defs table # according to column_defs table
try: try:
if node != self.prev_handle: try:
self.prev_data = self.db.get_raw_person_data(str(node)) data = self.lru_data[node]
self.prev_handle = node except:
data = self.db.get_raw_person_data(str(node))
self.lru_data[node] = data
return PeopleModel.COLUMN_DEFS[col][PeopleModel.COLUMN_DEF_LIST](self, return PeopleModel.COLUMN_DEFS[col][PeopleModel.COLUMN_DEF_LIST](self,
self.prev_data, node) data, node)
except: except:
return None return None
@ -416,10 +423,10 @@ class PeopleModel(gtk.GenericTreeModel):
def column_name(self, data, node): def column_name(self, data, node):
try: try:
name = self.lru[node] name = self.lru_name[node]
except: except:
name = NameDisplay.displayer.raw_sorted_name(data[PeopleModel._NAME_COL]) name = NameDisplay.displayer.raw_sorted_name(data[PeopleModel._NAME_COL])
self.lru[node] = name self.lru_name[node] = name
return name return name
def column_id(self, data, node): def column_id(self, data, node):
@ -435,6 +442,14 @@ class PeopleModel(gtk.GenericTreeModel):
return PeopleModel._GENDER[data[PeopleModel._GENDER_COL]] return PeopleModel._GENDER[data[PeopleModel._GENDER_COL]]
def column_birth_day(self, data, node): def column_birth_day(self, data, node):
try:
value = self.lru_bdate[node]
except:
value = self._get_birth_data(data,node)
self.lru_bdate[node] = value
return value
def _get_birth_data(self, data, node):
index = data[PeopleModel._BIRTH_COL] index = data[PeopleModel._BIRTH_COL]
if index != -1: if index != -1:
try: try:
@ -452,16 +467,23 @@ class PeopleModel(gtk.GenericTreeModel):
er = EventRef() er = EventRef()
er.unserialize(event_ref) er.unserialize(event_ref)
event = self.db.get_event_from_handle(er.ref) event = self.db.get_event_from_handle(er.ref)
etype = event.get_type() etype = event.get_type()[0]
date_str = DateHandler.get_date(event) date_str = DateHandler.get_date(event)
if (etype in [EventType.BAPTISM, EventType.CHRISTEN] if (etype in [EventType.BAPTISM, EventType.CHRISTEN]
and er.get_role() == EventRoleType.PRIMARY
and date_str != ""): and date_str != ""):
return "<i>" + cgi.escape(date_str) + "</i>" return "<i>" + cgi.escape(date_str) + "</i>"
return u"" return u""
def column_death_day(self, data, node): def column_death_day(self, data, node):
try:
value = self.lru_ddate[node]
except:
value = self._get_death_data(data,node)
self.lru_ddate[node] = value
return value
def _get_death_data(self, data, node):
index = data[PeopleModel._DEATH_COL] index = data[PeopleModel._DEATH_COL]
if index != -1: if index != -1:
try: try:

View File

@ -2948,7 +2948,9 @@ class GedcomParser(UpdateCallback):
if int(the_type) == RelLib.EventType.CUSTOM \ if int(the_type) == RelLib.EventType.CUSTOM \
and str(the_type) in self.attrs: and str(the_type) in self.attrs:
attr = RelLib.Attribute() attr = RelLib.Attribute()
attr.set_type((RelLib.EventType.CUSTOM,self.gedattr[matches[2]]))
new_type = self.gedattr.get(str(the_type),RelLib.AttributeType.CUSTOM)
attr.set_type(new_type)
attr.set_value(event.get_description()) attr.set_value(event.get_description())
state.person.add_attribute(attr) state.person.add_attribute(attr)
else: else: