* src/GrampsDb/_ReadXML.py: Parse old and new XML.
* src/GrampsDb/_WriteXML.py (dump_child_ref, dump_person_ref): Add methods. * src/RelLib/_ChildRef.py (ChildRef.set_mother_relation): Adapt to new types; (ChildRef.set_father_relation): Adapt to new types. * src/RelLib/_GrampsType.py (GrampsType.get_custom): Add method. (GrampsType.set): Allow setting from the same class instance. (GrampsType.is_default): Add method. svn: r6358
This commit is contained in:
parent
249b1ba53d
commit
e12c7b0de3
@ -3,6 +3,15 @@
|
|||||||
* src/DisplayTabs.py: remove property button stuff
|
* src/DisplayTabs.py: remove property button stuff
|
||||||
|
|
||||||
2006-04-18 Alex Roitman <shura@gramps-project.org>
|
2006-04-18 Alex Roitman <shura@gramps-project.org>
|
||||||
|
* src/GrampsDb/_ReadXML.py: Parse old and new XML.
|
||||||
|
* src/GrampsDb/_WriteXML.py (dump_child_ref, dump_person_ref): Add
|
||||||
|
methods.
|
||||||
|
* src/RelLib/_ChildRef.py (ChildRef.set_mother_relation): Adapt to
|
||||||
|
new types;
|
||||||
|
(ChildRef.set_father_relation): Adapt to new types.
|
||||||
|
* src/RelLib/_GrampsType.py (GrampsType.get_custom): Add method.
|
||||||
|
(GrampsType.set): Allow setting from the same class instance.
|
||||||
|
(GrampsType.is_default): Add method.
|
||||||
* src/DisplayTabs.py (BackRefList.create_buttons): Allow an
|
* src/DisplayTabs.py (BackRefList.create_buttons): Allow an
|
||||||
additional argument to keep the caller happy.
|
additional argument to keep the caller happy.
|
||||||
|
|
||||||
|
@ -345,6 +345,7 @@ class GrampsParser:
|
|||||||
self.increment = 100
|
self.increment = 100
|
||||||
self.event = None
|
self.event = None
|
||||||
self.eventref = None
|
self.eventref = None
|
||||||
|
self.childref = None
|
||||||
self.name = None
|
self.name = None
|
||||||
self.tempDefault = None
|
self.tempDefault = None
|
||||||
self.home = None
|
self.home = None
|
||||||
@ -374,6 +375,7 @@ class GrampsParser:
|
|||||||
"bookmarks" : (None, None),
|
"bookmarks" : (None, None),
|
||||||
"child" : (self.start_child,None),
|
"child" : (self.start_child,None),
|
||||||
"childof" : (self.start_childof,None),
|
"childof" : (self.start_childof,None),
|
||||||
|
"childref" : (self.start_childref,self.stop_childref),
|
||||||
"city" : (None, self.stop_city),
|
"city" : (None, self.stop_city),
|
||||||
"country" : (None, self.stop_country),
|
"country" : (None, self.stop_country),
|
||||||
"comment" : (None, self.stop_comment),
|
"comment" : (None, self.stop_comment),
|
||||||
@ -860,12 +862,28 @@ class GrampsParser:
|
|||||||
person = self.find_person_by_gramps_id(self.map_gid(attrs["ref"]))
|
person = self.find_person_by_gramps_id(self.map_gid(attrs["ref"]))
|
||||||
handle = person_handle
|
handle = person_handle
|
||||||
|
|
||||||
|
# Here we are handling the old XML, in which
|
||||||
|
# frel and mrel belonged to the "childof" tag
|
||||||
|
# If that were the case then childref_map has the childref ready
|
||||||
if self.childref_map.has_key((self.family.handle,handle)):
|
if self.childref_map.has_key((self.family.handle,handle)):
|
||||||
self.family.add_child_ref(self.childref_map[(self.family.handle,handle)])
|
self.family.add_child_ref(
|
||||||
else:
|
self.childref_map[(self.family.handle,handle)])
|
||||||
ref = RelLib.ChildRef()
|
|
||||||
ref.ref = handle
|
def start_childref(self,attrs):
|
||||||
self.family.add_child_ref(ref)
|
# Here we are handling the new XML, in which frel and mrel
|
||||||
|
# belong to the "child" tag under family.
|
||||||
|
childref = RelLib.ChildRef()
|
||||||
|
childref.ref = attrs['hlink'].replace('_','')
|
||||||
|
self.childref.private = bool(attrs.get('priv'))
|
||||||
|
|
||||||
|
mrel = RelLib.ChildRefType().set_from_xml_str(attrs.get('mrel'))
|
||||||
|
frel = RelLib.ChildRefType().set_from_xml_str(attrs.get('frel'))
|
||||||
|
|
||||||
|
if not mrel.is_default():
|
||||||
|
childref.set_mother_relation(mrel)
|
||||||
|
if not frel.is_default() ):
|
||||||
|
childref.set_father_relation(frel)
|
||||||
|
self.family.add_child_reference(self.childref)
|
||||||
|
|
||||||
def start_url(self,attrs):
|
def start_url(self,attrs):
|
||||||
if not attrs.has_key("href"):
|
if not attrs.has_key("href"):
|
||||||
@ -924,11 +942,14 @@ class GrampsParser:
|
|||||||
family = self.find_family_by_gramps_id(self.map_fid(attrs["ref"]))
|
family = self.find_family_by_gramps_id(self.map_fid(attrs["ref"]))
|
||||||
handle = family.handle
|
handle = family.handle
|
||||||
|
|
||||||
mrel = crel_map.get(attrs.get('mrel'),RelLib.ChildRefType())
|
# Here we are handling the old XML, in which
|
||||||
frel = crel_map.get(attrs.get('frel'),RelLib.ChildRefType())
|
# frel and mrel belonged to the "childof" tag
|
||||||
|
mrel = RelLib.ChildRefType().set_from_xml_str(attrs.get('mrel'))
|
||||||
|
frel = RelLib.ChildRefType().set_from_xml_str(attrs.get('frel'))
|
||||||
|
|
||||||
if mrel != RelLib.ChildRefType.BIRTH or \
|
# Only need to worry about this if there are non-default rels
|
||||||
frel != RelLib.ChildRefType.BIRTH:
|
# Otherwise, if both are default, the family's child tag will do
|
||||||
|
if not ( mrel.is_default() and frel.is_default() ):
|
||||||
childref = RelLib.ChildRef()
|
childref = RelLib.ChildRef()
|
||||||
childref.ref = self.person.handle
|
childref.ref = self.person.handle
|
||||||
childref.set_mother_relation(mrel)
|
childref.set_mother_relation(mrel)
|
||||||
@ -994,6 +1015,8 @@ class GrampsParser:
|
|||||||
self.name.add_source_reference(self.source_ref)
|
self.name.add_source_reference(self.source_ref)
|
||||||
elif self.placeobj:
|
elif self.placeobj:
|
||||||
self.placeobj.add_source_reference(self.source_ref)
|
self.placeobj.add_source_reference(self.source_ref)
|
||||||
|
elif self.childref:
|
||||||
|
self.childref.add_source_reference(self.source_ref)
|
||||||
elif self.family:
|
elif self.family:
|
||||||
self.family.add_source_reference(self.source_ref)
|
self.family.add_source_reference(self.source_ref)
|
||||||
elif self.person:
|
elif self.person:
|
||||||
@ -1356,6 +1379,9 @@ class GrampsParser:
|
|||||||
self.repo.type = _ConstXML.tuple_from_xml(
|
self.repo.type = _ConstXML.tuple_from_xml(
|
||||||
_ConstXML.repository_types,tag)
|
_ConstXML.repository_types,tag)
|
||||||
|
|
||||||
|
def stop_childref(self,tag):
|
||||||
|
self.childref = None
|
||||||
|
|
||||||
def stop_eventref(self,tag):
|
def stop_eventref(self,tag):
|
||||||
self.eventref = None
|
self.eventref = None
|
||||||
|
|
||||||
@ -1583,6 +1609,8 @@ class GrampsParser:
|
|||||||
self.event.set_note_object(self.note)
|
self.event.set_note_object(self.note)
|
||||||
elif self.person:
|
elif self.person:
|
||||||
self.person.set_note_object(self.note)
|
self.person.set_note_object(self.note)
|
||||||
|
elif self.childref:
|
||||||
|
self.childref.set_note_object(self.note)
|
||||||
elif self.family:
|
elif self.family:
|
||||||
self.family.set_note_object(self.note)
|
self.family.set_note_object(self.note)
|
||||||
elif self.placeobj:
|
elif self.placeobj:
|
||||||
|
@ -414,32 +414,14 @@ class XmlWriter:
|
|||||||
self.write_url_list(person.get_url_list(),index+1)
|
self.write_url_list(person.get_url_list(),index+1)
|
||||||
|
|
||||||
for family_handle in person.get_parent_family_handle_list():
|
for family_handle in person.get_parent_family_handle_list():
|
||||||
|
self.write_ref("childof",family_handle,index+1)
|
||||||
family = self.db.get_family_from_handle(family_handle)
|
|
||||||
for child_ref in family.get_child_ref_list():
|
|
||||||
if child_ref.ref == person.handle:
|
|
||||||
mval = child_ref.get_mother_relation()
|
|
||||||
fval = child_ref.get_father_relation()
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
continue
|
|
||||||
|
|
||||||
if mval != RelLib.ChildRefType.BIRTH:
|
|
||||||
mrel=' mrel="%s"' % _ConstXML.str_for_xml(
|
|
||||||
_ConstXML.child_relations,mval)
|
|
||||||
else:
|
|
||||||
mrel=''
|
|
||||||
if fval != RelLib.ChildRefType.BIRTH:
|
|
||||||
frel=' frel="%s"' % _ConstXML.str_for_xml(
|
|
||||||
_ConstXML.child_relations,fval)
|
|
||||||
else:
|
|
||||||
frel=''
|
|
||||||
self.g.write(' %s<childof hlink="_%s"%s%s/>\n' % \
|
|
||||||
(sp,family_handle, mrel, frel))
|
|
||||||
|
|
||||||
for family_handle in person.get_family_handle_list():
|
for family_handle in person.get_family_handle_list():
|
||||||
self.write_ref("parentin",family_handle,index+1)
|
self.write_ref("parentin",family_handle,index+1)
|
||||||
|
|
||||||
|
for person_ref in person.get_person_ref_list():
|
||||||
|
self.dump_person_ref(person_ref,index+1)
|
||||||
|
|
||||||
self.write_note("note",person.get_note_object(),index+1)
|
self.write_note("note",person.get_note_object(),index+1)
|
||||||
for s in person.get_source_references():
|
for s in person.get_source_references():
|
||||||
self.dump_source_ref(s,index+2)
|
self.dump_source_ref(s,index+2)
|
||||||
@ -461,9 +443,8 @@ class XmlWriter:
|
|||||||
|
|
||||||
self.write_media_list(family.get_media_list(),index+1)
|
self.write_media_list(family.get_media_list(),index+1)
|
||||||
|
|
||||||
if len(family.get_child_ref_list()) > 0:
|
for child_ref in family.get_child_ref_list():
|
||||||
for child_ref in family.get_child_ref_list():
|
self.dump_child_ref(child_ref,index+1)
|
||||||
self.write_ref("child",child_ref.ref,index+1)
|
|
||||||
self.write_attribute_list(family.get_attribute_list())
|
self.write_attribute_list(family.get_attribute_list())
|
||||||
self.write_note("note",family.get_note_object(),index+1)
|
self.write_note("note",family.get_note_object(),index+1)
|
||||||
for s in family.get_source_references():
|
for s in family.get_source_references():
|
||||||
@ -519,6 +500,50 @@ class XmlWriter:
|
|||||||
self.dump_source_ref(s,index+2)
|
self.dump_source_ref(s,index+2)
|
||||||
self.g.write('%s</address>\n' % sp)
|
self.g.write('%s</address>\n' % sp)
|
||||||
|
|
||||||
|
def dump_person_ref(self,personref,index=1):
|
||||||
|
if not personref or not personref.ref:
|
||||||
|
return
|
||||||
|
sp = " "*index
|
||||||
|
priv_text = conf_priv(personref)
|
||||||
|
rel_text = ' rel="%s"'
|
||||||
|
|
||||||
|
sreflist = personref.get_source_references()
|
||||||
|
if (len(sreflist) == 0) and personref.get_note() =="":
|
||||||
|
self.write_ref('personref',personref.ref,index,close=True,
|
||||||
|
extra_text=priv_text+rel_text)
|
||||||
|
else:
|
||||||
|
self.write_ref('personref',personref.ref,index,close=False,
|
||||||
|
extra_text=priv_text+rel_text)
|
||||||
|
for sref in sreflist:
|
||||||
|
self.dump_source_ref(sref,index+1)
|
||||||
|
self.write_note("note",personref.get_note_object(),index+1)
|
||||||
|
self.g.write('%s</personref>\n' % sp)
|
||||||
|
|
||||||
|
def dump_child_ref(self,childref,index=1):
|
||||||
|
if not childref or not childref.ref:
|
||||||
|
return
|
||||||
|
sp = " "*index
|
||||||
|
priv_text = conf_priv(childref)
|
||||||
|
if childref.frel.is_default():
|
||||||
|
frel_text = ''
|
||||||
|
else:
|
||||||
|
frel_text = ' frel="%s"' % childref.frel.xml_str()
|
||||||
|
if childref.mrel.is_default():
|
||||||
|
mrel_text = ''
|
||||||
|
else:
|
||||||
|
mrel_text = ' mrel="%s"' % childref.mrel.xml_str()
|
||||||
|
sreflist = childref.get_source_references()
|
||||||
|
if (len(sreflist) == 0) and childref.get_note() =="":
|
||||||
|
self.write_ref('childref',childref.ref,index,close=True,
|
||||||
|
extra_text=priv_text+frel_text+mrel_text)
|
||||||
|
else:
|
||||||
|
self.write_ref('childref',childref.ref,index,close=False,
|
||||||
|
extra_text=priv_text+frel_text+mrel_text)
|
||||||
|
for sref in sreflist:
|
||||||
|
self.dump_source_ref(sref,index+1)
|
||||||
|
self.write_note("note",childref.get_note_object(),index+1)
|
||||||
|
self.g.write('%s</childref>\n' % sp)
|
||||||
|
|
||||||
def dump_event_ref(self,eventref,index=1):
|
def dump_event_ref(self,eventref,index=1):
|
||||||
if not eventref or not eventref.ref:
|
if not eventref or not eventref.ref:
|
||||||
return
|
return
|
||||||
|
@ -127,8 +127,7 @@ class ChildRef(BaseObject,PrivacyBase,SourceBase,NoteBase,RefBase):
|
|||||||
|
|
||||||
def set_mother_relation(self,rel):
|
def set_mother_relation(self,rel):
|
||||||
"""Sets relation between the person and mother"""
|
"""Sets relation between the person and mother"""
|
||||||
assert(isinstance(rel,ChildRefType))
|
self.mrel.set(rel)
|
||||||
self.mrel = rel
|
|
||||||
|
|
||||||
def get_mother_relation(self):
|
def get_mother_relation(self):
|
||||||
"""Returns the relation between the person and mother"""
|
"""Returns the relation between the person and mother"""
|
||||||
@ -136,8 +135,7 @@ class ChildRef(BaseObject,PrivacyBase,SourceBase,NoteBase,RefBase):
|
|||||||
|
|
||||||
def set_father_relation(self,frel):
|
def set_father_relation(self,frel):
|
||||||
"""Sets relation between the person and father"""
|
"""Sets relation between the person and father"""
|
||||||
assert(isinstance(frel,ChildRefType))
|
self.frel.set(frel)
|
||||||
self.frel = frel
|
|
||||||
|
|
||||||
def get_father_relation(self):
|
def get_father_relation(self):
|
||||||
"""Returns the relation between the person and father"""
|
"""Returns the relation between the person and father"""
|
||||||
|
@ -40,7 +40,10 @@ class GrampsType:
|
|||||||
self.set(value)
|
self.set(value)
|
||||||
|
|
||||||
def set(self, value):
|
def set(self, value):
|
||||||
if type(value) == tuple:
|
if isinstance(value,self.__class__):
|
||||||
|
self.val = value.val
|
||||||
|
self.string = value.string
|
||||||
|
elif type(value) == tuple:
|
||||||
self.val = value[0]
|
self.val = value[0]
|
||||||
self.string = value[1]
|
self.string = value[1]
|
||||||
elif type(value) == int:
|
elif type(value) == int:
|
||||||
@ -68,12 +71,33 @@ class GrampsType:
|
|||||||
else:
|
else:
|
||||||
return self._I2SMAP.get(self.val,_('UNKNOWN'))
|
return self._I2SMAP.get(self.val,_('UNKNOWN'))
|
||||||
|
|
||||||
|
def xml_str(self):
|
||||||
|
"""
|
||||||
|
This method returns an untranslated string for non-custom values,
|
||||||
|
or the value, if it is custom.
|
||||||
|
"""
|
||||||
|
# FIXME: this needs to be fixed.
|
||||||
|
return self.string
|
||||||
|
|
||||||
|
def set_from_xml_str(self,the_str):
|
||||||
|
"""
|
||||||
|
This method sets the type instance based on the untranslated
|
||||||
|
string (obtained e.g. from XML).
|
||||||
|
"""
|
||||||
|
return self
|
||||||
|
|
||||||
def __int__(self):
|
def __int__(self):
|
||||||
return self.val
|
return self.val
|
||||||
|
|
||||||
def get_map(self):
|
def get_map(self):
|
||||||
return self._I2SMAP
|
return self._I2SMAP
|
||||||
|
|
||||||
|
def is_custom(self):
|
||||||
|
return self.val == self._CUSTOM
|
||||||
|
|
||||||
|
def is_default(self):
|
||||||
|
return self.val == self._DEFAULT
|
||||||
|
|
||||||
def get_custom(self):
|
def get_custom(self):
|
||||||
return self._CUSTOM
|
return self._CUSTOM
|
||||||
|
|
||||||
@ -92,5 +116,3 @@ class GrampsType:
|
|||||||
return cmp(self.string,value.string)
|
return cmp(self.string,value.string)
|
||||||
else:
|
else:
|
||||||
return cmp(self.val,value.val)
|
return cmp(self.val,value.val)
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user