4198: Person view does not remove a row correctly when two people are merged.
This is a major patch by Michael Nauta. It means all writes happen immediately to bsddb, and the bsddb rollback is used on a crash. Transaction is no longer used to store changes and do them on commit. Undo database is set on end. At the same time with statement is used throughout for transactions At the same time, the original bug in merge code should be fixed Still some issues, that will be ironed out svn: r16523
This commit is contained in:
@@ -231,30 +231,30 @@ class ChangeNames(tool.BatchTool, ManagedWindow.ManagedWindow):
|
||||
GrampsDisplay.help(WIKI_HELP_PAGE , WIKI_HELP_SEC)
|
||||
|
||||
def on_ok_clicked(self, obj):
|
||||
self.trans = self.db.transaction_begin("",batch=True)
|
||||
self.db.disable_signals()
|
||||
changelist = set(self.model.get_value(node,1)
|
||||
for node in self.iter_list
|
||||
if self.model.get_value(node,0))
|
||||
with self.db.transaction_begin(_("Capitalization changes"),batch=True
|
||||
) as self.trans:
|
||||
self.db.disable_signals()
|
||||
changelist = set(self.model.get_value(node,1)
|
||||
for node in self.iter_list
|
||||
if self.model.get_value(node,0))
|
||||
|
||||
#with self.db.get_person_cursor(update=True, commit=True) as cursor:
|
||||
# for handle, data in cursor:
|
||||
for handle in self.db.get_person_handles(False):
|
||||
person = self.db.get_person_from_handle(handle)
|
||||
#person = Person(data)
|
||||
change = False
|
||||
for name in [person.get_primary_name()] + person.get_alternate_names():
|
||||
sname = find_surname_name(handle, name.serialize())
|
||||
if sname in changelist:
|
||||
change = True
|
||||
for surn in name.get_surname_list():
|
||||
sname = self.name_cap(surn.get_surname())
|
||||
surn.set_surname(sname)
|
||||
if change:
|
||||
#cursor.update(handle, person.serialize())
|
||||
self.db.commit_person(person, transaction=self.trans)
|
||||
#with self.db.get_person_cursor(update=True, commit=True) as cursor:
|
||||
# for handle, data in cursor:
|
||||
for handle in self.db.get_person_handles(False):
|
||||
person = self.db.get_person_from_handle(handle)
|
||||
#person = Person(data)
|
||||
change = False
|
||||
for name in [person.get_primary_name()] + person.get_alternate_names():
|
||||
sname = find_surname_name(handle, name.serialize())
|
||||
if sname in changelist:
|
||||
change = True
|
||||
for surn in name.get_surname_list():
|
||||
sname = self.name_cap(surn.get_surname())
|
||||
surn.set_surname(sname)
|
||||
if change:
|
||||
#cursor.update(handle, person.serialize())
|
||||
self.db.commit_person(person, transaction=self.trans)
|
||||
|
||||
self.db.transaction_commit(self.trans,_("Capitalization changes"))
|
||||
self.db.enable_signals()
|
||||
self.db.request_rebuild()
|
||||
# FIXME: this probably needs to be removed, and bookmarks
|
||||
|
@@ -110,23 +110,23 @@ class ChangeTypes(tool.BatchTool, ManagedWindow.ManagedWindow):
|
||||
|
||||
modified = 0
|
||||
|
||||
self.trans = self.db.transaction_begin("",batch=True)
|
||||
self.db.disable_signals()
|
||||
if not cli:
|
||||
progress = ProgressMeter(_('Analyzing Events'),'')
|
||||
progress.set_pass('',self.db.get_number_of_events())
|
||||
|
||||
for event_handle in self.db.get_event_handles():
|
||||
event = self.db.get_event_from_handle(event_handle)
|
||||
if event.get_type().xml_str() == fromtype:
|
||||
event.type.set_from_xml_str(totype)
|
||||
modified += 1
|
||||
self.db.commit_event(event,self.trans)
|
||||
with self.db.transaction_begin(_('Change types'), batch=True
|
||||
) as self.trans:
|
||||
self.db.disable_signals()
|
||||
if not cli:
|
||||
progress.step()
|
||||
if not cli:
|
||||
progress.close()
|
||||
self.db.transaction_commit(self.trans,_('Change types'))
|
||||
progress = ProgressMeter(_('Analyzing Events'),'')
|
||||
progress.set_pass('',self.db.get_number_of_events())
|
||||
|
||||
for event_handle in self.db.get_event_handles():
|
||||
event = self.db.get_event_from_handle(event_handle)
|
||||
if event.get_type().xml_str() == fromtype:
|
||||
event.type.set_from_xml_str(totype)
|
||||
modified += 1
|
||||
self.db.commit_event(event,self.trans)
|
||||
if not cli:
|
||||
progress.step()
|
||||
if not cli:
|
||||
progress.close()
|
||||
self.db.enable_signals()
|
||||
self.db.request_rebuild()
|
||||
|
||||
|
@@ -174,37 +174,37 @@ class Check(tool.BatchTool):
|
||||
if self.db.__class__.__name__ == 'DbBsddb':
|
||||
low_level(self.db)
|
||||
|
||||
trans = self.db.transaction_begin("", batch=True)
|
||||
self.db.disable_signals()
|
||||
checker = CheckIntegrity(dbstate, uistate, trans)
|
||||
checker.fix_encoding()
|
||||
checker.fix_ctrlchars_in_notes()
|
||||
checker.cleanup_missing_photos(cli)
|
||||
checker.cleanup_deleted_name_formats()
|
||||
with self.db.transaction_begin(_("Check Integrity"), batch=True
|
||||
) as trans:
|
||||
self.db.disable_signals()
|
||||
checker = CheckIntegrity(dbstate, uistate, trans)
|
||||
checker.fix_encoding()
|
||||
checker.fix_ctrlchars_in_notes()
|
||||
checker.cleanup_missing_photos(cli)
|
||||
checker.cleanup_deleted_name_formats()
|
||||
|
||||
prev_total = -1
|
||||
total = 0
|
||||
prev_total = -1
|
||||
total = 0
|
||||
|
||||
#start with empty objects, broken links can be corrected below then
|
||||
checker.cleanup_empty_objects()
|
||||
while prev_total != total:
|
||||
prev_total = total
|
||||
|
||||
checker.check_for_broken_family_links()
|
||||
checker.check_parent_relationships()
|
||||
checker.cleanup_empty_families(cli)
|
||||
checker.cleanup_duplicate_spouses()
|
||||
#start with empty objects, broken links can be corrected below then
|
||||
checker.cleanup_empty_objects()
|
||||
while prev_total != total:
|
||||
prev_total = total
|
||||
|
||||
checker.check_for_broken_family_links()
|
||||
checker.check_parent_relationships()
|
||||
checker.cleanup_empty_families(cli)
|
||||
checker.cleanup_duplicate_spouses()
|
||||
|
||||
total = checker.family_errors()
|
||||
|
||||
total = checker.family_errors()
|
||||
|
||||
checker.check_events()
|
||||
checker.check_person_references()
|
||||
checker.check_place_references()
|
||||
checker.check_source_references()
|
||||
checker.check_media_references()
|
||||
checker.check_repo_references()
|
||||
checker.check_note_references()
|
||||
self.db.transaction_commit(trans, _("Check Integrity"))
|
||||
checker.check_events()
|
||||
checker.check_person_references()
|
||||
checker.check_place_references()
|
||||
checker.check_source_references()
|
||||
checker.check_media_references()
|
||||
checker.check_repo_references()
|
||||
checker.check_note_references()
|
||||
self.db.enable_signals()
|
||||
self.db.request_rebuild()
|
||||
|
||||
|
@@ -155,70 +155,70 @@ class DateParserDisplayTest(tool.Tool):
|
||||
# (4,7,1789,False,5,88,1876,False),"Text comment")
|
||||
#dates.append( d)
|
||||
|
||||
trans = self.db.transaction_begin("",batch=True)
|
||||
self.db.disable_signals()
|
||||
self.progress.set_pass(_('Generating dates'),
|
||||
len(dates))
|
||||
# now add them as birth to new persons
|
||||
i = 1
|
||||
for dateval in dates:
|
||||
person = gen.lib.Person()
|
||||
name = gen.lib.Name()
|
||||
name.set_surname("DateTest")
|
||||
name.set_first_name("Test %d" % i)
|
||||
person.set_primary_name( name)
|
||||
self.db.add_person(person,trans)
|
||||
bevent = gen.lib.Event()
|
||||
bevent.set_type(gen.lib.EventType.BIRTH)
|
||||
bevent.set_date_object(dateval)
|
||||
bevent.set_description("Date Test %d (source)" % i)
|
||||
bevent_h = self.db.add_event(bevent,trans)
|
||||
bevent_ref = gen.lib.EventRef()
|
||||
bevent_ref.set_reference_handle(bevent_h)
|
||||
# for the death event display the date as text and parse it back to a new date
|
||||
ndate = None
|
||||
try:
|
||||
datestr = _dd.display( dateval)
|
||||
with self.db.transaction_begin(_("Date Test Plugin"),batch=True
|
||||
) as trans:
|
||||
self.db.disable_signals()
|
||||
self.progress.set_pass(_('Generating dates'),
|
||||
len(dates))
|
||||
# now add them as birth to new persons
|
||||
i = 1
|
||||
for dateval in dates:
|
||||
person = gen.lib.Person()
|
||||
name = gen.lib.Name()
|
||||
name.set_surname("DateTest")
|
||||
name.set_first_name("Test %d" % i)
|
||||
person.set_primary_name( name)
|
||||
self.db.add_person(person,trans)
|
||||
bevent = gen.lib.Event()
|
||||
bevent.set_type(gen.lib.EventType.BIRTH)
|
||||
bevent.set_date_object(dateval)
|
||||
bevent.set_description("Date Test %d (source)" % i)
|
||||
bevent_h = self.db.add_event(bevent,trans)
|
||||
bevent_ref = gen.lib.EventRef()
|
||||
bevent_ref.set_reference_handle(bevent_h)
|
||||
# for the death event display the date as text and parse it back to a new date
|
||||
ndate = None
|
||||
try:
|
||||
ndate = _dp.parse( datestr)
|
||||
if not ndate:
|
||||
datestr = _dd.display( dateval)
|
||||
try:
|
||||
ndate = _dp.parse( datestr)
|
||||
if not ndate:
|
||||
ndate = gen.lib.Date()
|
||||
ndate.set_as_text("DateParser None")
|
||||
person.set_marker(gen.lib.MarkerType.TODO_TYPE)
|
||||
else:
|
||||
person.set_marker(gen.lib.MarkerType.COMPLETE)
|
||||
except:
|
||||
ndate = gen.lib.Date()
|
||||
ndate.set_as_text("DateParser None")
|
||||
ndate.set_as_text("DateParser Exception %s" % ("".join(traceback.format_exception(*sys.exc_info())),))
|
||||
person.set_marker(gen.lib.MarkerType.TODO_TYPE)
|
||||
else:
|
||||
person.set_marker(gen.lib.MarkerType.COMPLETE)
|
||||
except:
|
||||
ndate = gen.lib.Date()
|
||||
ndate.set_as_text("DateParser Exception %s" % ("".join(traceback.format_exception(*sys.exc_info())),))
|
||||
ndate.set_as_text("DateDisplay Exception: %s" % ("".join(traceback.format_exception(*sys.exc_info())),))
|
||||
person.set_marker(gen.lib.MarkerType.TODO_TYPE)
|
||||
except:
|
||||
ndate = gen.lib.Date()
|
||||
ndate.set_as_text("DateDisplay Exception: %s" % ("".join(traceback.format_exception(*sys.exc_info())),))
|
||||
person.set_marker(gen.lib.MarkerType.TODO_TYPE)
|
||||
|
||||
if dateval.get_modifier() != gen.lib.Date.MOD_TEXTONLY \
|
||||
and ndate.get_modifier() == gen.lib.Date.MOD_TEXTONLY:
|
||||
# parser was unable to correctly parse the string
|
||||
ndate.set_as_text( "TEXTONLY: "+ndate.get_text())
|
||||
person.set_marker(gen.lib.MarkerType.TODO_TYPE)
|
||||
if dateval.get_modifier() == gen.lib.Date.MOD_TEXTONLY \
|
||||
and dateval.get_text().count("Traceback") \
|
||||
and person.get_marker() == gen.lib.MarkerType.COMPLETE:
|
||||
person.set_marker(gen.lib.MarkerType.TODO_TYPE)
|
||||
|
||||
devent = gen.lib.Event()
|
||||
devent.set_type(gen.lib.EventType.DEATH)
|
||||
devent.set_date_object(ndate)
|
||||
devent.set_description("Date Test %d (result)" % i)
|
||||
devent_h = self.db.add_event(devent,trans)
|
||||
devent_ref = gen.lib.EventRef()
|
||||
devent_ref.set_reference_handle(devent_h)
|
||||
person.set_birth_ref(bevent_ref)
|
||||
person.set_death_ref(devent_ref)
|
||||
self.db.commit_person(person,trans)
|
||||
i = i + 1
|
||||
self.progress.step()
|
||||
self.db.transaction_commit(trans, _("Date Test Plugin"))
|
||||
|
||||
if dateval.get_modifier() != gen.lib.Date.MOD_TEXTONLY \
|
||||
and ndate.get_modifier() == gen.lib.Date.MOD_TEXTONLY:
|
||||
# parser was unable to correctly parse the string
|
||||
ndate.set_as_text( "TEXTONLY: "+ndate.get_text())
|
||||
person.set_marker(gen.lib.MarkerType.TODO_TYPE)
|
||||
if dateval.get_modifier() == gen.lib.Date.MOD_TEXTONLY \
|
||||
and dateval.get_text().count("Traceback") \
|
||||
and person.get_marker() == gen.lib.MarkerType.COMPLETE:
|
||||
person.set_marker(gen.lib.MarkerType.TODO_TYPE)
|
||||
|
||||
devent = gen.lib.Event()
|
||||
devent.set_type(gen.lib.EventType.DEATH)
|
||||
devent.set_date_object(ndate)
|
||||
devent.set_description("Date Test %d (result)" % i)
|
||||
devent_h = self.db.add_event(devent,trans)
|
||||
devent_ref = gen.lib.EventRef()
|
||||
devent_ref.set_reference_handle(devent_h)
|
||||
person.set_birth_ref(bevent_ref)
|
||||
person.set_death_ref(devent_ref)
|
||||
self.db.commit_person(person,trans)
|
||||
i = i + 1
|
||||
self.progress.step()
|
||||
self.db.enable_signals()
|
||||
self.db.request_rebuild()
|
||||
self.progress.close()
|
||||
|
@@ -78,34 +78,34 @@ class EventNames(tool.BatchTool, ManagedWindow.ManagedWindow):
|
||||
"""
|
||||
Perform the actual extraction of information.
|
||||
"""
|
||||
trans = self.db.transaction_begin("", batch=True)
|
||||
self.db.disable_signals()
|
||||
self.change = False
|
||||
counter = 0
|
||||
with self.db.transaction_begin(_("Event name changes"), batch=True
|
||||
) as trans:
|
||||
self.db.disable_signals()
|
||||
self.change = False
|
||||
counter = 0
|
||||
|
||||
for person in self.db.iter_people():
|
||||
for event_ref in person.get_event_ref_list():
|
||||
if event_ref.get_role() == gen.lib.EventRoleType.PRIMARY:
|
||||
event_handle = event_ref.ref
|
||||
event = self.db.get_event_from_handle(event_handle)
|
||||
if event.get_description() == "":
|
||||
person_event_name(event, person)
|
||||
self.db.commit_event(event, trans)
|
||||
self.change = True
|
||||
counter += 1
|
||||
for person in self.db.iter_people():
|
||||
for event_ref in person.get_event_ref_list():
|
||||
if event_ref.get_role() == gen.lib.EventRoleType.PRIMARY:
|
||||
event_handle = event_ref.ref
|
||||
event = self.db.get_event_from_handle(event_handle)
|
||||
if event.get_description() == "":
|
||||
person_event_name(event, person)
|
||||
self.db.commit_event(event, trans)
|
||||
self.change = True
|
||||
counter += 1
|
||||
|
||||
for family in self.db.iter_families():
|
||||
for event_ref in family.get_event_ref_list():
|
||||
if event_ref.get_role() == gen.lib.EventRoleType.FAMILY:
|
||||
event_handle = event_ref.ref
|
||||
event = self.db.get_event_from_handle(event_handle)
|
||||
if event.get_description() == "":
|
||||
family_event_name(event, family, self.db)
|
||||
self.db.commit_event(event, trans)
|
||||
self.change = True
|
||||
counter += 1
|
||||
for family in self.db.iter_families():
|
||||
for event_ref in family.get_event_ref_list():
|
||||
if event_ref.get_role() == gen.lib.EventRoleType.FAMILY:
|
||||
event_handle = event_ref.ref
|
||||
event = self.db.get_event_from_handle(event_handle)
|
||||
if event.get_description() == "":
|
||||
family_event_name(event, family, self.db)
|
||||
self.db.commit_event(event, trans)
|
||||
self.change = True
|
||||
counter += 1
|
||||
|
||||
self.db.transaction_commit(trans, _("Event name changes"))
|
||||
self.db.enable_signals()
|
||||
self.db.request_rebuild()
|
||||
|
||||
|
@@ -591,27 +591,27 @@ class ExtractCity(tool.BatchTool, ManagedWindow.ManagedWindow):
|
||||
GrampsDisplay.help()
|
||||
|
||||
def on_ok_clicked(self, obj):
|
||||
self.trans = self.db.transaction_begin("", batch=True)
|
||||
self.db.disable_signals()
|
||||
changelist = [node for node in self.iter_list
|
||||
if self.model.get_value(node, 0)]
|
||||
with self.db.transaction_begin(_("Extract Place data"), batch=True
|
||||
) as self.trans:
|
||||
self.db.disable_signals()
|
||||
changelist = [node for node in self.iter_list
|
||||
if self.model.get_value(node, 0)]
|
||||
|
||||
for change in changelist:
|
||||
row = self.model[change]
|
||||
place = self.db.get_place_from_handle(row[6])
|
||||
(city, state, postal, country) = (row[2], row[3], row[4], row[5])
|
||||
for change in changelist:
|
||||
row = self.model[change]
|
||||
place = self.db.get_place_from_handle(row[6])
|
||||
(city, state, postal, country) = (row[2], row[3], row[4], row[5])
|
||||
|
||||
if city:
|
||||
place.get_main_location().set_city(city)
|
||||
if state:
|
||||
place.get_main_location().set_state(state)
|
||||
if postal:
|
||||
place.get_main_location().set_postal_code(postal)
|
||||
if country:
|
||||
place.get_main_location().set_country(country)
|
||||
self.db.commit_place(place, self.trans)
|
||||
if city:
|
||||
place.get_main_location().set_city(city)
|
||||
if state:
|
||||
place.get_main_location().set_state(state)
|
||||
if postal:
|
||||
place.get_main_location().set_postal_code(postal)
|
||||
if country:
|
||||
place.get_main_location().set_country(country)
|
||||
self.db.commit_place(place, self.trans)
|
||||
|
||||
self.db.transaction_commit(self.trans, _("Extract Place data"))
|
||||
self.db.enable_signals()
|
||||
self.db.request_rebuild()
|
||||
self.close()
|
||||
|
@@ -358,27 +358,13 @@ class BatchOp(UpdateCallback):
|
||||
and transactions before and after the running.
|
||||
Should not be overridden without good reasons.
|
||||
"""
|
||||
self._pre_run()
|
||||
success = self._run()
|
||||
self._post_run()
|
||||
return success
|
||||
|
||||
def _pre_run(self):
|
||||
"""
|
||||
Low-level method for starting transaction and disabling signals.
|
||||
Should not be overridden without good reasons.
|
||||
"""
|
||||
self.trans = self.db.transaction_begin("",batch=True)
|
||||
self.db.disable_signals()
|
||||
|
||||
def _post_run(self):
|
||||
"""
|
||||
Low-level method for committing transaction and enabling signals.
|
||||
Should not be overridden without good reasons.
|
||||
"""
|
||||
self.db.transaction_commit(self.trans,self.title)
|
||||
with self.db.transaction_begin("", batch=True) as self.trans:
|
||||
success = self._run()
|
||||
trans.set_description(self.title)
|
||||
self.db.enable_signals()
|
||||
self.db.request_rebuild()
|
||||
return success
|
||||
|
||||
def _run(self):
|
||||
"""
|
||||
|
@@ -242,47 +242,45 @@ class NotRelated(tool.ActivePersonTool, ManagedWindow.ManagedWindow) :
|
||||
tag_name = self.tagcombo.get_active_text()
|
||||
|
||||
# start the db transaction
|
||||
transaction = self.db.transaction_begin()
|
||||
with self.db.transaction_begin("Tag not related") as transaction:
|
||||
|
||||
tag = self.db.get_tag_from_name(tag_name)
|
||||
if not tag:
|
||||
# create the tag if it doesn't already exist
|
||||
tag = Tag()
|
||||
tag.set_name(tag_name)
|
||||
tag.set_priority(self.db.get_number_of_tags())
|
||||
tag_handle = self.db.add_tag(tag, transaction)
|
||||
else:
|
||||
tag_handle = tag.get_handle()
|
||||
tag = self.db.get_tag_from_name(tag_name)
|
||||
if not tag:
|
||||
# create the tag if it doesn't already exist
|
||||
tag = Tag()
|
||||
tag.set_name(tag_name)
|
||||
tag.set_priority(self.db.get_number_of_tags())
|
||||
tag_handle = self.db.add_tag(tag, transaction)
|
||||
else:
|
||||
tag_handle = tag.get_handle()
|
||||
|
||||
# if more than 1 person is selected, use a progress indicator
|
||||
if rows > 1:
|
||||
progress = ProgressMeter(self.title,_('Starting'))
|
||||
#TRANS: no singular form needed, as rows is always > 1
|
||||
progress.set_pass(ngettext("Setting tag for %d person",
|
||||
"Setting tag for %d people",
|
||||
rows) % rows, rows)
|
||||
# if more than 1 person is selected, use a progress indicator
|
||||
if rows > 1:
|
||||
progress = ProgressMeter(self.title,_('Starting'))
|
||||
#TRANS: no singular form needed, as rows is always > 1
|
||||
progress.set_pass(ngettext("Setting tag for %d person",
|
||||
"Setting tag for %d people",
|
||||
rows) % rows, rows)
|
||||
|
||||
|
||||
# iterate through all of the selected rows
|
||||
(model, paths) = self.treeSelection.get_selected_rows()
|
||||
|
||||
# iterate through all of the selected rows
|
||||
(model, paths) = self.treeSelection.get_selected_rows()
|
||||
for path in paths:
|
||||
if progress:
|
||||
progress.step()
|
||||
|
||||
# for the current row, get the GID and the person from the database
|
||||
iter = self.model.get_iter(path)
|
||||
personGid = self.model.get_value(iter, 1)
|
||||
person = self.db.get_person_from_gramps_id(personGid)
|
||||
|
||||
for path in paths:
|
||||
if progress:
|
||||
progress.step()
|
||||
# add the tag to the person
|
||||
person.add_tag(tag_handle)
|
||||
|
||||
# for the current row, get the GID and the person from the database
|
||||
iter = self.model.get_iter(path)
|
||||
personGid = self.model.get_value(iter, 1)
|
||||
person = self.db.get_person_from_gramps_id(personGid)
|
||||
# save this change
|
||||
self.db.commit_person(person, transaction)
|
||||
|
||||
# add the tag to the person
|
||||
person.add_tag(tag_handle)
|
||||
|
||||
# save this change
|
||||
self.db.commit_person(person, transaction)
|
||||
|
||||
# commit the entire transaction
|
||||
self.db.transaction_commit(transaction, "Tag not related")
|
||||
|
||||
# refresh the tags column
|
||||
self.treeView.set_model(None)
|
||||
|
@@ -481,63 +481,62 @@ class PatchNames(tool.BatchTool, ManagedWindow.ManagedWindow):
|
||||
GrampsDisplay.help(webpage=WIKI_HELP_PAGE, section=WIKI_HELP_SEC)
|
||||
|
||||
def on_ok_clicked(self, obj):
|
||||
trans = self.db.transaction_begin("", batch=True)
|
||||
self.db.disable_signals()
|
||||
with self.db.transaction_begin(_("Extract information from names"),
|
||||
batch=True) as trans:
|
||||
self.db.disable_signals()
|
||||
|
||||
for key, data in self.handle_to_action.items():
|
||||
p = self.db.get_person_from_handle(key)
|
||||
if self.nickid in data:
|
||||
modelhandle = self.nick_hash[key]
|
||||
val = self.model.get_value(modelhandle, 0)
|
||||
if val:
|
||||
given, nick = data[self.nickid]
|
||||
name = p.get_primary_name()
|
||||
name.set_first_name(given.strip())
|
||||
name.set_nick_name(nick.strip())
|
||||
for key, data in self.handle_to_action.items():
|
||||
p = self.db.get_person_from_handle(key)
|
||||
if self.nickid in data:
|
||||
modelhandle = self.nick_hash[key]
|
||||
val = self.model.get_value(modelhandle, 0)
|
||||
if val:
|
||||
given, nick = data[self.nickid]
|
||||
name = p.get_primary_name()
|
||||
name.set_first_name(given.strip())
|
||||
name.set_nick_name(nick.strip())
|
||||
|
||||
if self.titleid in data:
|
||||
modelhandle = self.title_hash[key]
|
||||
val = self.model.get_value(modelhandle, 0)
|
||||
if val:
|
||||
title, given = data[self.titleid]
|
||||
name = p.get_primary_name()
|
||||
name.set_first_name(given.strip())
|
||||
name.set_title(title.strip())
|
||||
|
||||
if self.pref1id in data:
|
||||
modelhandle = self.prefix1_hash[key]
|
||||
val = self.model.get_value(modelhandle, 0)
|
||||
if val:
|
||||
given, prefixtotal, prefix = data[self.pref1id]
|
||||
name = p.get_primary_name()
|
||||
name.set_first_name(given.strip())
|
||||
oldpref = name.get_surname_list()[0].get_prefix().strip()
|
||||
if oldpref == '' or oldpref == prefix.strip():
|
||||
name.get_surname_list()[0].set_prefix(prefix)
|
||||
else:
|
||||
name.get_surname_list()[0].set_prefix('%s %s' % (prefix, oldpref))
|
||||
|
||||
if self.compid in data:
|
||||
modelhandle = self.compound_hash[key]
|
||||
val = self.model.get_value(modelhandle, 0)
|
||||
if val:
|
||||
surns, prefs, cons, prims, origs = data[self.compid]
|
||||
name = p.get_primary_name()
|
||||
new_surn_list = []
|
||||
for surn, pref, con, prim, orig in zip(surns, prefs, cons,
|
||||
prims, origs):
|
||||
new_surn_list.append(gen.lib.Surname())
|
||||
new_surn_list[-1].set_surname(surn.strip())
|
||||
new_surn_list[-1].set_prefix(pref.strip())
|
||||
new_surn_list[-1].set_connector(con.strip())
|
||||
new_surn_list[-1].set_primary(prim)
|
||||
new_surn_list[-1].set_origintype(orig)
|
||||
name.set_surname_list(new_surn_list)
|
||||
if self.titleid in data:
|
||||
modelhandle = self.title_hash[key]
|
||||
val = self.model.get_value(modelhandle, 0)
|
||||
if val:
|
||||
title, given = data[self.titleid]
|
||||
name = p.get_primary_name()
|
||||
name.set_first_name(given.strip())
|
||||
name.set_title(title.strip())
|
||||
|
||||
self.db.commit_person(p, trans)
|
||||
|
||||
self.db.transaction_commit(trans,
|
||||
_("Extract information from names"))
|
||||
if self.pref1id in data:
|
||||
modelhandle = self.prefix1_hash[key]
|
||||
val = self.model.get_value(modelhandle, 0)
|
||||
if val:
|
||||
given, prefixtotal, prefix = data[self.pref1id]
|
||||
name = p.get_primary_name()
|
||||
name.set_first_name(given.strip())
|
||||
oldpref = name.get_surname_list()[0].get_prefix().strip()
|
||||
if oldpref == '' or oldpref == prefix.strip():
|
||||
name.get_surname_list()[0].set_prefix(prefix)
|
||||
else:
|
||||
name.get_surname_list()[0].set_prefix('%s %s' % (prefix, oldpref))
|
||||
|
||||
if self.compid in data:
|
||||
modelhandle = self.compound_hash[key]
|
||||
val = self.model.get_value(modelhandle, 0)
|
||||
if val:
|
||||
surns, prefs, cons, prims, origs = data[self.compid]
|
||||
name = p.get_primary_name()
|
||||
new_surn_list = []
|
||||
for surn, pref, con, prim, orig in zip(surns, prefs, cons,
|
||||
prims, origs):
|
||||
new_surn_list.append(gen.lib.Surname())
|
||||
new_surn_list[-1].set_surname(surn.strip())
|
||||
new_surn_list[-1].set_prefix(pref.strip())
|
||||
new_surn_list[-1].set_connector(con.strip())
|
||||
new_surn_list[-1].set_primary(prim)
|
||||
new_surn_list[-1].set_origintype(orig)
|
||||
name.set_surname_list(new_surn_list)
|
||||
|
||||
self.db.commit_person(p, trans)
|
||||
|
||||
self.db.enable_signals()
|
||||
self.db.request_rebuild()
|
||||
self.close()
|
||||
|
@@ -285,23 +285,23 @@ class RemoveUnused(tool.Tool, ManagedWindow.ManagedWindow, UpdateCallback):
|
||||
self.reset()
|
||||
|
||||
def do_remove(self, obj):
|
||||
trans = self.db.transaction_begin("", batch=False)
|
||||
self.db.disable_signals()
|
||||
with self.db.transaction_begin(_("Remove unused objects"),
|
||||
batch=False) as trans:
|
||||
self.db.disable_signals()
|
||||
|
||||
for row_num in range(len(self.real_model)-1, -1, -1):
|
||||
path = (row_num,)
|
||||
row = self.real_model[path]
|
||||
if not row[RemoveUnused.MARK_COL]:
|
||||
continue
|
||||
for row_num in range(len(self.real_model)-1, -1, -1):
|
||||
path = (row_num,)
|
||||
row = self.real_model[path]
|
||||
if not row[RemoveUnused.MARK_COL]:
|
||||
continue
|
||||
|
||||
the_type = row[RemoveUnused.OBJ_TYPE_COL]
|
||||
handle = row[RemoveUnused.OBJ_HANDLE_COL]
|
||||
remove_func = self.tables[the_type]['remove']
|
||||
remove_func(handle, trans)
|
||||
the_type = row[RemoveUnused.OBJ_TYPE_COL]
|
||||
handle = row[RemoveUnused.OBJ_HANDLE_COL]
|
||||
remove_func = self.tables[the_type]['remove']
|
||||
remove_func(handle, trans)
|
||||
|
||||
self.real_model.remove(row.iter)
|
||||
self.real_model.remove(row.iter)
|
||||
|
||||
self.db.transaction_commit(trans, _("Remove unused objects"))
|
||||
self.db.enable_signals()
|
||||
self.db.request_rebuild()
|
||||
|
||||
|
@@ -67,97 +67,97 @@ class ReorderIds(tool.BatchTool):
|
||||
else:
|
||||
print "Reordering Gramps IDs..."
|
||||
|
||||
self.trans = db.transaction_begin("", batch=True)
|
||||
db.disable_signals()
|
||||
with db.transaction_begin(_("Reorder Gramps IDs"), batch=True
|
||||
) as self.trans:
|
||||
db.disable_signals()
|
||||
|
||||
if uistate:
|
||||
self.progress.set_pass(_('Reordering People IDs'),
|
||||
db.get_number_of_people())
|
||||
self.reorder(gen.lib.Person,
|
||||
db.get_person_from_gramps_id,
|
||||
db.get_person_from_handle,
|
||||
db.find_next_person_gramps_id,
|
||||
db.person_map,
|
||||
db.commit_person,
|
||||
db.person_prefix)
|
||||
if uistate:
|
||||
self.progress.set_pass(_('Reordering People IDs'),
|
||||
db.get_number_of_people())
|
||||
self.reorder(gen.lib.Person,
|
||||
db.get_person_from_gramps_id,
|
||||
db.get_person_from_handle,
|
||||
db.find_next_person_gramps_id,
|
||||
db.person_map,
|
||||
db.commit_person,
|
||||
db.person_prefix)
|
||||
|
||||
if uistate:
|
||||
self.progress.set_pass(_('Reordering Family IDs'),
|
||||
db.get_number_of_families())
|
||||
self.reorder(gen.lib.Family,
|
||||
db.get_family_from_gramps_id,
|
||||
db.get_family_from_handle,
|
||||
db.find_next_family_gramps_id,
|
||||
db.family_map,
|
||||
db.commit_family,
|
||||
db.family_prefix)
|
||||
if uistate:
|
||||
self.progress.set_pass(_('Reordering Event IDs'),
|
||||
db.get_number_of_events())
|
||||
self.reorder(gen.lib.Event,
|
||||
db.get_event_from_gramps_id,
|
||||
db.get_event_from_handle,
|
||||
db.find_next_event_gramps_id,
|
||||
db.event_map,
|
||||
db.commit_event,
|
||||
db.event_prefix)
|
||||
if uistate:
|
||||
self.progress.set_pass(_('Reordering Media Object IDs'),
|
||||
db.get_number_of_media_objects())
|
||||
self.reorder(gen.lib.MediaObject,
|
||||
db.get_object_from_gramps_id,
|
||||
db.get_object_from_handle,
|
||||
db.find_next_object_gramps_id,
|
||||
db.media_map,
|
||||
db.commit_media_object,
|
||||
db.mediaobject_prefix)
|
||||
if uistate:
|
||||
self.progress.set_pass(_('Reordering Source IDs'),
|
||||
db.get_number_of_sources())
|
||||
self.reorder(gen.lib.Source,
|
||||
db.get_source_from_gramps_id,
|
||||
db.get_source_from_handle,
|
||||
db.find_next_source_gramps_id,
|
||||
db.source_map,
|
||||
db.commit_source,
|
||||
db.source_prefix)
|
||||
if uistate:
|
||||
self.progress.set_pass(_('Reordering Place IDs'),
|
||||
db.get_number_of_places())
|
||||
self.reorder(gen.lib.Place,
|
||||
db.get_place_from_gramps_id,
|
||||
db.get_place_from_handle,
|
||||
db.find_next_place_gramps_id,
|
||||
db.place_map,
|
||||
db.commit_place,
|
||||
db.place_prefix)
|
||||
if uistate:
|
||||
self.progress.set_pass(_('Reordering Repository IDs'),
|
||||
db.get_number_of_repositories())
|
||||
self.reorder(gen.lib.Repository,
|
||||
db.get_repository_from_gramps_id,
|
||||
db.get_repository_from_handle,
|
||||
db.find_next_repository_gramps_id,
|
||||
db.repository_map,
|
||||
db.commit_repository,
|
||||
db.repository_prefix)
|
||||
#add reorder notes ID
|
||||
if uistate:
|
||||
self.progress.set_pass(_('Reordering Note IDs'),
|
||||
db.get_number_of_notes())
|
||||
self.reorder(gen.lib.Note,
|
||||
db.get_note_from_gramps_id,
|
||||
db.get_note_from_handle,
|
||||
db.find_next_note_gramps_id,
|
||||
db.note_map,
|
||||
db.commit_note,
|
||||
db.note_prefix)
|
||||
if uistate:
|
||||
self.progress.close()
|
||||
else:
|
||||
print "Done."
|
||||
|
||||
db.transaction_commit(self.trans, _("Reorder Gramps IDs"))
|
||||
if uistate:
|
||||
self.progress.set_pass(_('Reordering Family IDs'),
|
||||
db.get_number_of_families())
|
||||
self.reorder(gen.lib.Family,
|
||||
db.get_family_from_gramps_id,
|
||||
db.get_family_from_handle,
|
||||
db.find_next_family_gramps_id,
|
||||
db.family_map,
|
||||
db.commit_family,
|
||||
db.family_prefix)
|
||||
if uistate:
|
||||
self.progress.set_pass(_('Reordering Event IDs'),
|
||||
db.get_number_of_events())
|
||||
self.reorder(gen.lib.Event,
|
||||
db.get_event_from_gramps_id,
|
||||
db.get_event_from_handle,
|
||||
db.find_next_event_gramps_id,
|
||||
db.event_map,
|
||||
db.commit_event,
|
||||
db.event_prefix)
|
||||
if uistate:
|
||||
self.progress.set_pass(_('Reordering Media Object IDs'),
|
||||
db.get_number_of_media_objects())
|
||||
self.reorder(gen.lib.MediaObject,
|
||||
db.get_object_from_gramps_id,
|
||||
db.get_object_from_handle,
|
||||
db.find_next_object_gramps_id,
|
||||
db.media_map,
|
||||
db.commit_media_object,
|
||||
db.mediaobject_prefix)
|
||||
if uistate:
|
||||
self.progress.set_pass(_('Reordering Source IDs'),
|
||||
db.get_number_of_sources())
|
||||
self.reorder(gen.lib.Source,
|
||||
db.get_source_from_gramps_id,
|
||||
db.get_source_from_handle,
|
||||
db.find_next_source_gramps_id,
|
||||
db.source_map,
|
||||
db.commit_source,
|
||||
db.source_prefix)
|
||||
if uistate:
|
||||
self.progress.set_pass(_('Reordering Place IDs'),
|
||||
db.get_number_of_places())
|
||||
self.reorder(gen.lib.Place,
|
||||
db.get_place_from_gramps_id,
|
||||
db.get_place_from_handle,
|
||||
db.find_next_place_gramps_id,
|
||||
db.place_map,
|
||||
db.commit_place,
|
||||
db.place_prefix)
|
||||
if uistate:
|
||||
self.progress.set_pass(_('Reordering Repository IDs'),
|
||||
db.get_number_of_repositories())
|
||||
self.reorder(gen.lib.Repository,
|
||||
db.get_repository_from_gramps_id,
|
||||
db.get_repository_from_handle,
|
||||
db.find_next_repository_gramps_id,
|
||||
db.repository_map,
|
||||
db.commit_repository,
|
||||
db.repository_prefix)
|
||||
#add reorder notes ID
|
||||
if uistate:
|
||||
self.progress.set_pass(_('Reordering Note IDs'),
|
||||
db.get_number_of_notes())
|
||||
self.reorder(gen.lib.Note,
|
||||
db.get_note_from_gramps_id,
|
||||
db.get_note_from_handle,
|
||||
db.find_next_note_gramps_id,
|
||||
db.note_map,
|
||||
db.commit_note,
|
||||
db.note_prefix)
|
||||
if uistate:
|
||||
self.progress.close()
|
||||
else:
|
||||
print "Done."
|
||||
|
||||
db.enable_signals()
|
||||
db.request_rebuild()
|
||||
|
||||
|
@@ -95,12 +95,12 @@ class SortEvents(PluginWindows.ToolManagedWindowBatch):
|
||||
self.sort_name = sort_functions[sort_func_num][0]
|
||||
self.sort_func = sort_functions[sort_func_num][1]
|
||||
self.sort = Sort.Sort(self.db)
|
||||
trans = self.db.transaction_begin("", batch=True)
|
||||
self.db.disable_signals()
|
||||
family_handles = self.sort_person_events(trans)
|
||||
if len(family_handles) > 0:
|
||||
self.sort_family_events(family_handles, trans)
|
||||
self.db.transaction_commit(trans, _("Sort event changes"))
|
||||
with self.db.transaction_begin(_("Sort event changes"), batch=True
|
||||
) as trans:
|
||||
self.db.disable_signals()
|
||||
family_handles = self.sort_person_events(trans)
|
||||
if len(family_handles) > 0:
|
||||
self.sort_family_events(family_handles, trans)
|
||||
self.db.enable_signals()
|
||||
self.db.request_rebuild()
|
||||
|
||||
|
@@ -219,7 +219,7 @@ class TestcaseGenerator(tool.BatchTool):
|
||||
self.db.disable_signals()
|
||||
else:
|
||||
batch = False
|
||||
self.trans = self.db.transaction_begin("")
|
||||
self.trans = self.db.transaction_begin(_("Testcase generator"))
|
||||
|
||||
if False and self.options.handler.options_dict['no_trans']:
|
||||
|
||||
@@ -1324,6 +1324,9 @@ class TestcaseGenerator(tool.BatchTool):
|
||||
return result
|
||||
|
||||
def commit_transaction(self):
|
||||
# The way transactions are used in this file is outdated; use a with
|
||||
# statement so that transaction abort is called on failure. It is too
|
||||
# much effort to update this file.
|
||||
#if self.options.handler.options_dict['no_trans']:
|
||||
self.db.transaction_commit(self.trans,_("Testcase generator step %d") % self.transaction_count)
|
||||
self.transaction_count += 1
|
||||
|
Reference in New Issue
Block a user