From d327a58277d9ede8e7c3a8d008e70df55aaf3b54 Mon Sep 17 00:00:00 2001 From: Don Allingham Date: Tue, 4 May 2004 04:34:48 +0000 Subject: [PATCH] update for GEDCOM memory usage svn: r3123 --- src/PeopleModel.py | 10 ++-- src/plugins/ReadGedcom.py | 102 +++++++++++++++++++------------------- 2 files changed, 57 insertions(+), 55 deletions(-) diff --git a/src/PeopleModel.py b/src/PeopleModel.py index 856823ce6..98cc2f494 100644 --- a/src/PeopleModel.py +++ b/src/PeopleModel.py @@ -251,9 +251,13 @@ class PeopleModel(gtk.GenericTreeModel): self.top_visible = {} def set_visible(self,iter,val): - col = self.iter2path[iter] - self.top_visible[col[0]] = val - self.visible[iter] = val + try: + col = self.iter2path[iter] + self.top_visible[col[0]] = val + self.visible[iter] = val + except: + print iter,val + self.visible[iter] = val def on_iter_next(self, node): '''returns the next node at this level of the tree''' diff --git a/src/plugins/ReadGedcom.py b/src/plugins/ReadGedcom.py index 44a4a545b..93d89112f 100644 --- a/src/plugins/ReadGedcom.py +++ b/src/plugins/ReadGedcom.py @@ -231,7 +231,6 @@ class GedcomParser: self.trans = string.maketrans('','') self.delc = self.trans[0:31] - self.trans2 = self.trans[0:128] + ('?' * 128) self.window = window @@ -264,7 +263,7 @@ class GedcomParser: mypaths = [] f = open("/proc/mounts","r") - for line in f.readlines(): + for line in f.xreadlines(): paths = string.split(line) ftype = paths[2].upper() if ftype in file_systems.keys(): @@ -330,7 +329,7 @@ class GedcomParser: def update(self,field,text): field.set_text(text) while gtk.events_pending(): - gtk.mainiteration() + gtk.main_iteration() def get_next(self): if self.backoff == 0: @@ -492,12 +491,16 @@ class GedcomParser: father = self.family.get_father_id() if father: father.add_address(self.addr) + self.db.commit_person(father) mother = self.family.get_mother_id() if mother: mother.add_address(self.addr) + self.db.commit_person(mother) for child in self.family.get_child_id_list(): child.add_address(self.addr) + self.db.commit_person(child) self.db.commit_family(self.family) + del self.family elif matches[2] == "INDI": if self.indi_count % UPDATE == 0 and self.window: self.update(self.people_obj,str(self.indi_count)) @@ -505,9 +508,10 @@ class GedcomParser: id = matches[1] id = id[1:-1] self.person = self.find_or_create_person(id) - self.added[self.person.get_id()] = self.person + self.added[self.person.get_id()] = 1 self.parse_individual() self.db.commit_person(self.person) + del self.person elif matches[2] in ["SUBM","SUBN","REPO"]: self.ignore_sub_junk(1) elif matches[1] in ["SUBM","SUBN","OBJE","_EVENT_DEFN"]: @@ -670,6 +674,7 @@ class GedcomParser: self.family.add_event_id(event.get_id()) self.parse_family_event(event,2) self.db.commit_event(event) + del event def parse_note_base(self,matches,obj,level,old_note,task): note = old_note @@ -1704,23 +1709,25 @@ class GedcomParser: prefix = self.db.iprefix index = 0 new_pmax = self.db.pmap_index - for pid, person in self.added.items(): + for pid in self.added.keys(): index = index + 1 if self.refn.has_key(pid): val = self.refn[pid] new_key = prefix % val new_pmax = max(new_pmax,val) + person = self.db.find_person_from_id(pid) + # new ID is not used if not self.db.has_person_id(new_key): - self.db.remove_person_id(person.get_id()) + self.db.remove_person_id(pid) person.set_id(new_key) - self.db.add_person_as(person) + self.db.add_person(person) else: tp = self.db.find_person_from_id(new_key) # same person, just change it if person == tp: - self.db.remove_person_id(person.get_id()) + self.db.remove_person_id(pid) person.set_id(new_key) self.db.add_person_as(person) # give up trying to use the refn as a key @@ -1729,8 +1736,11 @@ class GedcomParser: self.db.pmap_index = new_pmax -global file_top - +#------------------------------------------------------------------------- +# +# +# +#------------------------------------------------------------------------- def readData(database,active_person,cb): global db global callback @@ -1738,51 +1748,39 @@ def readData(database,active_person,cb): db = database callback = cb - - file_top = gtk.FileSelection("%s - GRAMPS" % _title_string) - file_top.hide_fileop_buttons() - file_top.ok_button.connect('clicked', on_ok_clicked) - file_top.cancel_button.connect('clicked', on_cancel_clicked) - file_top.show() + + choose = gtk.FileChooserDialog("%s - GRAMPS" % _title_string, + None, + gtk.FILE_CHOOSER_ACTION_OPEN, + (gtk.STOCK_CANCEL, + gtk.RESPONSE_CANCEL, + gtk.STOCK_OPEN, + gtk.RESPONSE_OK)) + filter = gtk.FileFilter() + filter.set_name(_('GEDCOM files')) + filter.add_pattern('*.ged') + filter.add_pattern('*.GED') + choose.add_filter(filter) + + filter = gtk.FileFilter() + filter.set_name(_('All files')) + filter.add_pattern('*') + choose.add_filter(filter) + + response = choose.run() + choose.destroy() + if response == gtk.RESPONSE_OK: + filename = choose.get_filename() + try: + importData(db,filename) + except: + import DisplayTrace + DisplayTrace.DisplayTrace() #------------------------------------------------------------------------- # # # #------------------------------------------------------------------------- -def on_ok_clicked(obj): - - name = file_top.get_filename() - if name == "": - return - Utils.destroy_passed_object(file_top) - try: - importData(db,name) - except: - import DisplayTrace - DisplayTrace.DisplayTrace() - -def on_cancel_clicked(obj): - file_top.destroy() - -#------------------------------------------------------------------------- -# -# -# -#------------------------------------------------------------------------- - -if __name__ == "__main__": - import sys - import GrampsXML - import profile - - print "Reading %s" % sys.argv[1] - - db = GrampsXML.GrampsXML() - g = GedcomParser(db,sys.argv[1],None) - profile.run('g.parse_gedcom_file()') - g.resolve_refns() - -else: - from Plugins import register_import - register_import(readData,_title_string) +from Plugins import register_import +register_import(readData,_title_string)