* src/RelLib.py: rework of the API

* src/*.py: rework of the api


svn: r3371
This commit is contained in:
Don Allingham
2004-08-11 03:42:38 +00:00
parent 082907d675
commit 93c5dbebcd
26 changed files with 771 additions and 856 deletions

View File

@ -222,6 +222,9 @@ class GedcomParser:
self.is_ftw = 0
self.idswap = {}
self.gid2id = {}
self.sid2id = {}
self.lid2id = {}
self.fid2id = {}
self.f = open(file,"rU")
self.filename = file
@ -442,7 +445,7 @@ class GedcomParser:
self.ignore_sub_junk(1)
def parse_source(self,name,level):
self.source = self.db.find_source(name,self.smap, self.trans)
self.source = self.find_or_create_source(name[1:-1])
note = ""
while 1:
@ -495,7 +498,7 @@ class GedcomParser:
if self.fam_count % UPDATE == 0 and self.window:
self.update(self.families_obj,str(self.fam_count))
self.fam_count = self.fam_count + 1
self.family = self.db.find_family_with_map(matches[1],self.fmap, self.trans)
self.family = self.find_or_create_family(matches[1])
self.parse_family()
if self.addr != None:
father = self.family.get_father_handle()
@ -563,10 +566,51 @@ class GedcomParser:
intid = Utils.create_id()
person.set_handle(intid)
person.set_gramps_id(gramps_id)
self.db.add_person_as(person,self.trans)
self.db.add_person(person,self.trans)
self.gid2id[gramps_id] = intid
return person
def find_or_create_source(self,gramps_id):
source = RelLib.Source()
intid = self.sid2id.get(gramps_id)
if self.db.source_map.has_key(intid):
source.unserialize(self.db.source_map.get(intid))
else:
intid = Utils.create_id()
source.set_handle(intid)
source.set_gramps_id(gramps_id)
self.db.add_source(source,self.trans)
self.sid2id[gramps_id] = intid
return source
def find_or_create_place(self,gramps_id):
place = RelLib.Place()
intid = self.lid2id.get(gramps_id)
if self.db.place_map.has_key(intid):
place.unserialize(self.db.place_map.get(intid))
else:
intid = Utils.create_id()
place.set_handle(intid)
place.set_title(gramps_id)
place.set_gramps_id(self.db.find_next_place_gramps_id())
print place.get_gramps_id()
self.db.add_place(place,self.trans)
self.lid2id[gramps_id] = intid
return place
def find_or_create_family(self,gramps_id):
family = RelLib.Family()
intid = self.fid2id.get(gramps_id)
if self.db.family_map.has_key(intid):
family.unserialize(self.db.family_map.get(intid))
else:
intid = Utils.create_id()
family.set_handle(intid)
family.set_gramps_id(gramps_id)
self.db.add_family(family,self.trans)
self.fid2id[gramps_id] = intid
return family
def parse_cause(self,event,level):
while 1:
matches = self.get_next()
@ -793,7 +837,7 @@ class GedcomParser:
self.person.set_lds_sealing(ord)
self.parse_ord(ord,2)
elif matches[1] == "FAMS":
family = self.db.find_family_with_map(matches[2],self.fmap, self.trans)
family = self.find_or_create_family(matches[2])
self.person.add_family_handle(family.get_handle())
if note == "":
note = self.parse_optional_note(2)
@ -802,7 +846,7 @@ class GedcomParser:
self.db.commit_family(family, self.trans)
elif matches[1] == "FAMC":
type,note = self.parse_famc_type(2)
family = self.db.find_family_with_map(matches[2],self.fmap, self.trans)
family = self.find_or_create_family(matches[2])
for f in self.person.get_parent_family_handle_list():
if f[0] == family.get_handle():
@ -1115,18 +1159,13 @@ class GedcomParser:
elif matches[1] == "DATE":
ord.set_date_object(self.extract_date(matches[2]))
elif matches[1] == "FAMC":
ord.set_family_handle(self.db.find_family_with_map(matches[2],self.fmap,self.trans))
ord.set_family_handle(self.find_or_create_family(matches[2]))
elif matches[1] == "PLAC":
try:
val = matches[2]
if self.placemap.has_key(val):
place_handle = self.placemap[val]
else:
place = RelLib.Place()
place.set_title(matches[2])
self.db.add_place(place, self.trans)
place_handle = place.get_handle()
self.placemap[val] = place_handle
place = self.find_or_create_place(matches[2])
place.set_title(matches[2])
place_handle = place.get_handle()
ord.set_place_handle(place_handle)
self.ignore_sub_junk(level+1)
except NameError:
@ -1172,14 +1211,9 @@ class GedcomParser:
event.set_description(val)
self.ignore_sub_junk(level+1)
else:
if self.placemap.has_key(val):
place_handle = self.placemap[val]
else:
place = RelLib.Place()
place.set_title(matches[2])
self.db.add_place(place, self.trans)
place_handle = place.get_handle()
self.placemap[val] = place_handle
place = self.find_or_create_place(val)
place_handle = place.get_handle()
place.set_title(matches[2])
event.set_place_handle(place_handle)
self.ignore_sub_junk(level+1)
elif matches[1] == "CAUS":
@ -1221,21 +1255,16 @@ class GedcomParser:
elif matches[1] == "SOUR":
event.add_source_reference(self.handle_source(matches,level+1))
elif matches[1] == "FAMC":
family = self.db.find_family_with_map(matches[2],self.fmap,self.trans)
family = self.find_or_create_family(matches[2])
mrel,frel = self.parse_adopt_famc(level+1);
if self.person.get_main_parents_family_handle() == family.get_handle():
self.person.set_main_parent_family_handle(None)
self.person.add_parent_family_handle(family.get_handle(),mrel,frel)
elif matches[1] == "PLAC":
val = matches[2]
if self.placemap.has_key(val):
place_handle = self.placemap[val]
else:
place = RelLib.Place()
place.set_title(matches[2])
self.db.add_place(place, self.trans)
place_handle = place.get_handle()
self.placemap[val] = place_handle
place = self.find_or_create_place(val)
place_handle = place.get_handle()
place.set_title(matches[2])
event.set_place_handle(place_handle)
self.ignore_sub_junk(level+1)
elif matches[1] == "TYPE":
@ -1356,14 +1385,9 @@ class GedcomParser:
event.add_source_reference(self.handle_source(matches,level+1))
elif matches[1] == "PLAC":
val = matches[2]
if self.placemap.has_key(val):
place_handle = self.placemap[val]
else:
place = RelLib.Place()
place.set_title(matches[2])
self.db.add_place(place, self.trans)
place_handle = place.get_handle()
self.placemap[val] = place_handle
place = self.find_or_create_place(val)
place_handle = place.get_handle()
place.set_title(matches[2])
event.set_place_handle(place_handle)
self.ignore_sub_junk(level+1)
elif matches[1] == 'OFFI':
@ -1722,13 +1746,13 @@ class GedcomParser:
if matches[2] and matches[2][0] != "@":
self.localref = self.localref + 1
ref = "gsr%d" % self.localref
s = self.db.find_source(ref,self.smap, self.trans)
s = self.find_or_create_source(ref)
source_ref.set_base_handle(s.get_handle())
s.set_title('Imported Source #%d' % self.localref)
s.set_note(matches[2] + self.parse_continue_data(level))
self.ignore_sub_junk(level+1)
else:
source_ref.set_base_handle(self.db.find_source(matches[2],self.smap,self.trans).get_handle())
source_ref.set_base_handle(self.find_or_create_source(matches[2][1:-1]))
self.parse_source_reference(source_ref,level)
return source_ref
@ -1761,7 +1785,7 @@ class GedcomParser:
self.db.remove_person_handle(pid,self.trans)
person.set_handle(new_key)
person.set_gramps_id(new_key)
self.db.add_person_as(person,self.trans)
self.db.add_person(person,self.trans)
# give up trying to use the refn as a key
else:
pass