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:
Benny Malengier
2011-01-31 21:54:58 +00:00
parent 28610b1ae3
commit 6d596ad987
49 changed files with 1842 additions and 1854 deletions

View File

@@ -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

View File

@@ -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()

View File

@@ -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()

View File

@@ -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()

View File

@@ -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()

View File

@@ -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()

View File

@@ -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):
"""

View File

@@ -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)

View File

@@ -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()

View File

@@ -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()

View File

@@ -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()

View File

@@ -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()

View File

@@ -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