* src/RelLib.py (Source.replace_source_references): Add method.
* src/MergeData.py (MergeSources.merge): Use new handle replacement. svn: r4243
This commit is contained in:
parent
c04ffca6e3
commit
9efa0094df
@ -1,3 +1,7 @@
|
|||||||
|
2005-03-26 Alex Roitman <shura@gramps-project.org>
|
||||||
|
* src/RelLib.py (Source.replace_source_references): Add method.
|
||||||
|
* src/MergeData.py (MergeSources.merge): Use new handle replacement.
|
||||||
|
|
||||||
2005-03-26 Don Allingham <don@gramps-project.org>
|
2005-03-26 Don Allingham <don@gramps-project.org>
|
||||||
* src/MergeData.py: Add interface support for parents/family merging
|
* src/MergeData.py: Add interface support for parents/family merging
|
||||||
|
|
||||||
|
188
src/MergeData.py
188
src/MergeData.py
@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# Gramps - a GTK+/GNOME based genealogy program
|
# Gramps - a GTK+/GNOME based genealogy program
|
||||||
#
|
#
|
||||||
# Copyright (C) 2000-2004 Donald N. Allingham
|
# Copyright (C) 2000-2005 Donald N. Allingham
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# 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
|
# it under the terms of the GNU General Public License as published by
|
||||||
@ -25,7 +25,7 @@
|
|||||||
# Standard python modules
|
# Standard python modules
|
||||||
#
|
#
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
import string
|
from gettext import gettext as _
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
@ -46,7 +46,6 @@ import Utils
|
|||||||
import ListModel
|
import ListModel
|
||||||
import NameDisplay
|
import NameDisplay
|
||||||
import const
|
import const
|
||||||
from gettext import gettext as _
|
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
@ -1263,8 +1262,8 @@ def place_match(p1,p2):
|
|||||||
if name1 == name2:
|
if name1 == name2:
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
list1 = string.split(string.replace(name1,","," "))
|
list1 = name1.replace(","," ").split()
|
||||||
list2 = string.split(string.replace(name2,","," "))
|
list2 = name2.replace(","," ").split()
|
||||||
|
|
||||||
value = 0
|
value = 0
|
||||||
for name in list1:
|
for name in list1:
|
||||||
@ -1289,10 +1288,10 @@ def is_initial(name):
|
|||||||
if len(name) > 2:
|
if len(name) > 2:
|
||||||
return 0
|
return 0
|
||||||
elif len(name) == 2:
|
elif len(name) == 2:
|
||||||
if name[0] in string.uppercase and name[1] == '.':
|
if name[0].isupper() and name[1] == '.':
|
||||||
return 1
|
return 1
|
||||||
else:
|
else:
|
||||||
return name[0] in string.uppercase
|
return name[0].isupper()
|
||||||
|
|
||||||
#---------------------------------------------------------------------
|
#---------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
@ -1521,157 +1520,34 @@ class MergeSources:
|
|||||||
old_handle = self.src2.get_handle()
|
old_handle = self.src2.get_handle()
|
||||||
new_handle = self.src1.get_handle()
|
new_handle = self.src1.get_handle()
|
||||||
|
|
||||||
for key in self.db.get_place_handles():
|
# people
|
||||||
p = self.db.get_place_from_handle(key)
|
for handle in self.db.get_person_handles(sort_handles=False):
|
||||||
for sref in p.get_source_references():
|
person = self.db.get_person_from_handle(handle)
|
||||||
if sref.get_base_handle() == old_handle:
|
person.replace_source_references(old_handle,new_handle)
|
||||||
sref.set_base_handle(new_handle)
|
|
||||||
|
|
||||||
for key in self.db.get_person_handles(sort_handles=False):
|
# family
|
||||||
p = self.db.get_person_from_handle(key)
|
for handle in self.db.get_family_handles():
|
||||||
name = self.name_display(p)
|
family = self.db.get_family_from_handle(handle)
|
||||||
# Sources of person
|
family.replace_source_references(old_handle,new_handle)
|
||||||
for sref in p.get_source_references():
|
|
||||||
if sref.get_base_handle() == self.source.get_handle():
|
|
||||||
person_list.append((name,''))
|
|
||||||
for event_handle in p.get_event_list() + [p.get_birth_handle(), p.get_death_handle()]:
|
|
||||||
if event_handle:
|
|
||||||
event = self.db.get_event_from_handle(event_handle)
|
|
||||||
# Personal event sources
|
|
||||||
for sref in event.get_source_references():
|
|
||||||
if sref.get_base_handle() == self.source.get_handle():
|
|
||||||
p_event_list.append((name,event.get_name()))
|
|
||||||
# personal event's media
|
|
||||||
for v in event.get_media_list():
|
|
||||||
# personal event's media's sources
|
|
||||||
for sref in v.get_source_references():
|
|
||||||
if sref.get_base_handle() == self.source.get_handle():
|
|
||||||
o_handle = v.get_reference_handle()
|
|
||||||
o = self.db.get_object_from_handle(o_handle)
|
|
||||||
p_event_list_media.append((name,o.get_description()))
|
|
||||||
for vv in v.get_attribute_list():
|
|
||||||
# personal event's media's attribute's sources
|
|
||||||
for sref in vv.get_source_references():
|
|
||||||
if sref.get_base_handle() == self.source.get_handle():
|
|
||||||
p_event_list_media_attr.append((name,vv.get_type()))
|
|
||||||
# personal LDS events Sources
|
|
||||||
if p.get_lds_baptism():
|
|
||||||
for sref in p.get_lds_baptism().get_source_references():
|
|
||||||
if sref.get_base_handle() == self.source.get_handle():
|
|
||||||
p_lds_list.append((name,_('LDS Baptism')))
|
|
||||||
if p.get_lds_endowment():
|
|
||||||
for sref in p.get_lds_endowment().get_source_references():
|
|
||||||
if sref.get_base_handle() == self.source.get_handle():
|
|
||||||
p_lds_list.append((name,_('Endowment')))
|
|
||||||
if p.get_lds_sealing():
|
|
||||||
for sref in p.get_lds_sealing().get_source_references():
|
|
||||||
if sref.get_base_handle() == self.source.get_handle():
|
|
||||||
p_lds_list.append((name,_('Sealed to parents')))
|
|
||||||
|
|
||||||
# Personal attribute's sources
|
# events
|
||||||
for v in p.get_attribute_list():
|
for handle in self.db.get_event_handles():
|
||||||
for sref in v.get_source_references():
|
event = self.db.get_event_from_handle(handle)
|
||||||
if sref.get_base_handle() == self.source.get_handle():
|
event.replace_source_references(old_handle,new_handle)
|
||||||
p_attr_list.append((name,v.get_type()))
|
|
||||||
# personal Names' sources
|
|
||||||
for v in p.get_alternate_names() + [p.get_primary_name()]:
|
|
||||||
for sref in v.get_source_references():
|
|
||||||
if sref.get_base_handle() == self.source.get_handle():
|
|
||||||
p_name_list.append((name,v.get_name()))
|
|
||||||
# personal addresses' sources
|
|
||||||
for v in p.get_address_list():
|
|
||||||
for sref in v.get_source_references():
|
|
||||||
if sref.get_base_handle() == self.source.get_handle():
|
|
||||||
p_addr_list.append((name,v.get_street()))
|
|
||||||
# personal media sources
|
|
||||||
for v in p.get_media_list():
|
|
||||||
for sref in v.get_source_references():
|
|
||||||
if sref.get_base_handle() == self.source.get_handle():
|
|
||||||
o_handle = v.get_reference_handle()
|
|
||||||
o = self.db.get_object_from_handle(o_handle)
|
|
||||||
p_media_list.append((name,o.get_description()))
|
|
||||||
for vv in v.get_attribute_list():
|
|
||||||
# personal media's attribute's sources
|
|
||||||
for sref in vv.get_source_references():
|
|
||||||
if sref.get_base_handle() == self.source.get_handle():
|
|
||||||
p_media_attr_list.append((name,vv.get_type()))
|
|
||||||
# personal media's sources
|
|
||||||
for object_handle in self.db.get_media_object_handles():
|
|
||||||
obj = self.db.get_object_from_handle(object_handle)
|
|
||||||
name = obj.get_description()
|
|
||||||
for sref in obj.get_source_references():
|
|
||||||
if sref.get_base_handle() == self.source.get_handle():
|
|
||||||
m_list.append(name)
|
|
||||||
for v in obj.get_attribute_list():
|
|
||||||
# personal media attribute's sources
|
|
||||||
for sref in v.get_source_references():
|
|
||||||
if sref.get_base_handle() == self.source.get_handle():
|
|
||||||
m_attr_list.append((name,v.get_type()))
|
|
||||||
|
|
||||||
for family_handle in self.db.get_family_handles():
|
# sources
|
||||||
family = self.db.get_family_from_handle(family_handle)
|
for handle in self.db.get_source_handles():
|
||||||
f_id = family.get_father_handle()
|
source = self.db.get_source_from_handle(handle)
|
||||||
m_id = family.get_mother_handle()
|
source.replace_source_references(old_handle,new_handle)
|
||||||
if f_id:
|
|
||||||
f = self.db.get_person_from_handle(f_id)
|
|
||||||
if m_id:
|
|
||||||
m = self.db.get_person_from_handle(m_id)
|
|
||||||
if f_id and m_id:
|
|
||||||
name = _("%(father)s and %(mother)s") % {
|
|
||||||
"father" : self.name_display(f),
|
|
||||||
"mother" : self.name_display(m)}
|
|
||||||
elif f_id:
|
|
||||||
name = self.name_display(f)
|
|
||||||
else:
|
|
||||||
name = self.name_display(m)
|
|
||||||
for v_id in family.get_event_list():
|
|
||||||
v = self.db.get_event_from_handle(v_id)
|
|
||||||
if not v:
|
|
||||||
continue
|
|
||||||
# Family events sources
|
|
||||||
for sref in v.get_source_references():
|
|
||||||
if sref.get_base_handle() == self.source.get_handle():
|
|
||||||
f_event_list.append((name,v.get_name()))
|
|
||||||
# Family event's media
|
|
||||||
for vv in v.get_media_list():
|
|
||||||
# Family event's media's sources
|
|
||||||
for sref in vv.get_source_references():
|
|
||||||
if sref.get_base_handle() == self.source.get_handle():
|
|
||||||
o_handle = vv.get_reference_handle()
|
|
||||||
o = self.db.get_object_from_handle(o_handle)
|
|
||||||
f_event_list_media.append((name,o.get_description()))
|
|
||||||
for vvv in vv.get_attribute_list():
|
|
||||||
# Family event's media's attribute's sources
|
|
||||||
for sref in vvv.get_source_references():
|
|
||||||
if sref.get_base_handle() == self.source.get_handle():
|
|
||||||
f_event_list_media_attr.append((name,vvv.get_type()))
|
|
||||||
# Family LDS events' sources
|
|
||||||
if family.get_lds_sealing():
|
|
||||||
for sref in family.get_lds_sealing().get_source_references():
|
|
||||||
if sref.get_base_handle() == self.source.get_handle():
|
|
||||||
f_lds_list.append((name,_('Sealed to spouse')))
|
|
||||||
# Family sources
|
|
||||||
for sref in family.get_source_references():
|
|
||||||
if sref.get_base_handle() == self.source.get_handle():
|
|
||||||
family_list.append((name,''))
|
|
||||||
# Family attributes
|
|
||||||
for v in family.get_attribute_list():
|
|
||||||
for sref in v.get_source_references():
|
|
||||||
if sref.get_base_handle() == self.source.get_handle():
|
|
||||||
f_attr_list.append((name,v.get_type()))
|
|
||||||
# Family media
|
|
||||||
for v in family.get_media_list():
|
|
||||||
# Family media sources
|
|
||||||
for sref in v.get_source_references():
|
|
||||||
if sref.get_base_handle() == self.source.get_handle():
|
|
||||||
o_handle = v.get_reference_handle()
|
|
||||||
o = self.db.get_object_from_handle(o_handle)
|
|
||||||
f_media_list.append((name,o.get_description()))
|
|
||||||
for vv in v.get_attribute_list():
|
|
||||||
# Family media's attribute's sources
|
|
||||||
for sref in vv.get_source_references():
|
|
||||||
if sref.get_base_handle() == self.source.get_handle():
|
|
||||||
f_media_attr_list.append((name,vv.get_type()))
|
|
||||||
|
|
||||||
|
# places
|
||||||
|
for handle in self.db.get_place_handles():
|
||||||
|
place = self.db.get_place_from_handle(handle)
|
||||||
|
place.replace_source_references(old_handle,new_handle)
|
||||||
|
|
||||||
|
# media
|
||||||
|
for handle in self.db.get_media_object_handles():
|
||||||
|
obj = self.db.get_object_from_handle(handle)
|
||||||
|
obj.replace_source_references(old_handle,new_handle)
|
||||||
|
|
||||||
self.top.destroy()
|
self.top.destroy()
|
||||||
|
|
||||||
|
@ -2677,6 +2677,19 @@ class Source(PrimaryObject,MediaBase):
|
|||||||
for item in self.get_sourcref_child_list():
|
for item in self.get_sourcref_child_list():
|
||||||
item.remove_source_references(src_handle_list)
|
item.remove_source_references(src_handle_list)
|
||||||
|
|
||||||
|
def replace_source_references(self,old_handle,new_handle):
|
||||||
|
"""
|
||||||
|
Replaces references to source handles in the list
|
||||||
|
in this object and all child objects.
|
||||||
|
|
||||||
|
@param old_handle: The source handle to be replaced.
|
||||||
|
@type old_handle: str
|
||||||
|
@param new_handle: The source handle to replace the old one with.
|
||||||
|
@type new_handle: str
|
||||||
|
"""
|
||||||
|
for item in self.get_sourcref_child_list():
|
||||||
|
item.replace_source_references(old_handle,new_handle)
|
||||||
|
|
||||||
def get_data_map(self):
|
def get_data_map(self):
|
||||||
"""Returns the data map of attributes for the source"""
|
"""Returns the data map of attributes for the source"""
|
||||||
return self.datamap
|
return self.datamap
|
||||||
|
Loading…
Reference in New Issue
Block a user