6960: Error merging citations
Reapply from trunk these commits: commit 1594f61ea2dbd9eddb44a800c26f170ff5702491 Author: vassilii <vassilii@4ae1f11a-8b86-4847-b8af-ab372f36d1fd> Date: Fri Aug 30 22:33:58 2013 +0000 6960: Bless Source with an IndirectCitationBase git-svn-id: svn+ssh://svn.code.sf.net/p/gramps/code/trunk@22970 4ae1f11a-8b86-4847-b8af-ab372f36d1fd commit 6ec4b56d6530bd98638cb66365e6205d057f48ca Author: vassilii <vassilii@4ae1f11a-8b86-4847-b8af-ab372f36d1fd> Date: Fri Aug 30 22:03:14 2013 +0000 6960: mergecitations has broken copy of MCQ The MergeCitations batch tool had a cut-and-pasted code replicating MergeCitationQuery logic. Naturally, it diverged :-) Removed MergeCitations.Merge and use MergeCitationQuery instead. git-svn-id: svn+ssh://svn.code.sf.net/p/gramps/code/trunk@22969 4ae1f11a-8b86-4847-b8af-ab372f36d1fd svn: r22971
This commit is contained in:
parent
21fd8f2cfb
commit
314bbe6ca0
@ -37,13 +37,14 @@ from .notebase import NoteBase
|
|||||||
from .reporef import RepoRef
|
from .reporef import RepoRef
|
||||||
from .const import DIFFERENT, EQUAL, IDENTICAL
|
from .const import DIFFERENT, EQUAL, IDENTICAL
|
||||||
from ..constfunc import cuni
|
from ..constfunc import cuni
|
||||||
|
from .citationbase import IndirectCitationBase
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
# Source class
|
# Source class
|
||||||
#
|
#
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
class Source(MediaBase, NoteBase, PrimaryObject):
|
class Source(MediaBase, NoteBase, IndirectCitationBase, PrimaryObject):
|
||||||
"""A record of a source of information."""
|
"""A record of a source of information."""
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
@ -31,7 +31,7 @@ Provide merge capabilities for citations.
|
|||||||
#
|
#
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
from ..lib import (Person, Family, Event, Place,
|
from ..lib import (Person, Family, Event, Place,
|
||||||
MediaObject, Repository, Citation)
|
MediaObject, Repository, Citation, Source)
|
||||||
from ..db import DbTxn
|
from ..db import DbTxn
|
||||||
from ..const import GRAMPS_LOCALE as glocale
|
from ..const import GRAMPS_LOCALE as glocale
|
||||||
_ = glocale.translation.sgettext
|
_ = glocale.translation.sgettext
|
||||||
@ -101,6 +101,12 @@ class MergeCitationQuery(object):
|
|||||||
citation.replace_citation_references(old_handle,
|
citation.replace_citation_references(old_handle,
|
||||||
new_handle)
|
new_handle)
|
||||||
self.database.commit_citation(citation, trans)
|
self.database.commit_citation(citation, trans)
|
||||||
|
elif class_name == Source.__name__:
|
||||||
|
source = self.database.get_source_from_handle(handle)
|
||||||
|
assert(source.has_citation_reference(old_handle))
|
||||||
|
source.replace_citation_references(old_handle,
|
||||||
|
new_handle)
|
||||||
|
self.database.commit_source(source, trans)
|
||||||
else:
|
else:
|
||||||
raise MergeError("Encounter an object of type %s that has "
|
raise MergeError("Encounter an object of type %s that has "
|
||||||
"a citation reference." % class_name)
|
"a citation reference." % class_name)
|
||||||
|
@ -56,6 +56,7 @@ from gramps.gui.display import display_help
|
|||||||
from gramps.gen.datehandler import get_date
|
from gramps.gen.datehandler import get_date
|
||||||
from gramps.gui.managedwindow import ManagedWindow
|
from gramps.gui.managedwindow import ManagedWindow
|
||||||
from gramps.gen.const import GRAMPS_LOCALE as glocale
|
from gramps.gen.const import GRAMPS_LOCALE as glocale
|
||||||
|
from gramps.gen.merge import MergeCitationQuery
|
||||||
_ = glocale.translation.sgettext
|
_ = glocale.translation.sgettext
|
||||||
|
|
||||||
from gramps.gui.glade import Glade
|
from gramps.gui.glade import Glade
|
||||||
@ -189,38 +190,39 @@ class MergeCitations(tool.BatchTool,ManagedWindow):
|
|||||||
db.disable_signals()
|
db.disable_signals()
|
||||||
num_merges = 0
|
num_merges = 0
|
||||||
for handle in db.iter_source_handles():
|
for handle in db.iter_source_handles():
|
||||||
with DbTxn(_("Merge Citation"), db) as trans:
|
dict = {}
|
||||||
dict = {}
|
citation_handle_list = list(db.find_backlink_handles(handle))
|
||||||
citation_handle_list = list(db.find_backlink_handles(handle))
|
for (class_name, citation_handle) in citation_handle_list:
|
||||||
for (class_name, citation_handle) in citation_handle_list:
|
if class_name != Citation.__name__:
|
||||||
if class_name != Citation.__name__:
|
raise MergeError("Encountered an object of type %s "
|
||||||
raise MergeError("Encountered an object of type %s "
|
"that has a citation reference." % class_name)
|
||||||
"that has a citation reference." % class_name)
|
|
||||||
|
|
||||||
citation = db.get_citation_from_handle(citation_handle)
|
citation = db.get_citation_from_handle(citation_handle)
|
||||||
key = citation.get_page()
|
key = citation.get_page()
|
||||||
if fields != IGNORE_DATE and fields != IGNORE_BOTH:
|
if fields != IGNORE_DATE and fields != IGNORE_BOTH:
|
||||||
key += "\n" + get_date(citation)
|
key += "\n" + get_date(citation)
|
||||||
if fields != IGNORE_CONFIDENCE and fields != IGNORE_BOTH:
|
if fields != IGNORE_CONFIDENCE and fields != IGNORE_BOTH:
|
||||||
key += "\n" + \
|
key += "\n" + \
|
||||||
confidence[citation.get_confidence_level()]
|
confidence[citation.get_confidence_level()]
|
||||||
if key in dict and \
|
if key in dict and \
|
||||||
(not dont_merge_notes or len(citation.note_list) == 0):
|
(not dont_merge_notes or len(citation.note_list) == 0):
|
||||||
citation_match_handle = dict[key]
|
citation_match_handle = dict[key]
|
||||||
citation_match = \
|
citation_match = \
|
||||||
db.get_citation_from_handle(citation_match_handle)
|
db.get_citation_from_handle(citation_match_handle)
|
||||||
try:
|
try:
|
||||||
self.Merge(db, citation_match, citation, trans)
|
query = MergeCitationQuery(
|
||||||
except AssertionError:
|
self.dbstate, citation_match, citation)
|
||||||
print("Tool/Family Tree processing/MergeCitations", \
|
query.execute()
|
||||||
"citation1 gramps_id", citation_match.get_gramps_id(), \
|
except AssertionError:
|
||||||
"citation2 gramps_id", citation.get_gramps_id() , \
|
print("Tool/Family Tree processing/MergeCitations", \
|
||||||
"citation backlink handles", \
|
"citation1 gramps_id", citation_match.get_gramps_id(), \
|
||||||
list(db.find_backlink_handles(citation.get_handle())))
|
"citation2 gramps_id", citation.get_gramps_id() , \
|
||||||
num_merges += 1
|
"citation backlink handles", \
|
||||||
elif (not dont_merge_notes or len(citation.note_list) == 0):
|
list(db.find_backlink_handles(citation.get_handle())))
|
||||||
dict[key] = citation_handle
|
num_merges += 1
|
||||||
self.progress.step()
|
elif (not dont_merge_notes or len(citation.note_list) == 0):
|
||||||
|
dict[key] = citation_handle
|
||||||
|
self.progress.step()
|
||||||
db.enable_signals()
|
db.enable_signals()
|
||||||
db.request_rebuild()
|
db.request_rebuild()
|
||||||
self.progress.close()
|
self.progress.close()
|
||||||
@ -229,54 +231,7 @@ class MergeCitations(tool.BatchTool,ManagedWindow):
|
|||||||
glocale.translation.ngettext("%(num)d citation merged",
|
glocale.translation.ngettext("%(num)d citation merged",
|
||||||
"%(num)d citations merged", num_merges) % {'num': num_merges})
|
"%(num)d citations merged", num_merges) % {'num': num_merges})
|
||||||
self.close(obj)
|
self.close(obj)
|
||||||
|
|
||||||
def Merge (self, db, citation1, citation2, trans):
|
|
||||||
"""
|
|
||||||
Merges two citations into a single citation.
|
|
||||||
"""
|
|
||||||
new_handle = citation1.get_handle()
|
|
||||||
old_handle = citation2.get_handle()
|
|
||||||
|
|
||||||
citation1.merge(citation2)
|
|
||||||
|
|
||||||
db.commit_citation(citation1, trans)
|
|
||||||
for (class_name, handle) in db.find_backlink_handles(
|
|
||||||
old_handle):
|
|
||||||
if class_name == Person.__name__:
|
|
||||||
person = db.get_person_from_handle(handle)
|
|
||||||
assert(person.has_citation_reference(old_handle))
|
|
||||||
person.replace_citation_references(old_handle, new_handle)
|
|
||||||
db.commit_person(person, trans)
|
|
||||||
elif class_name == Family.__name__:
|
|
||||||
family = db.get_family_from_handle(handle)
|
|
||||||
assert(family.has_citation_reference(old_handle))
|
|
||||||
family.replace_citation_references(old_handle, new_handle)
|
|
||||||
db.commit_family(family, trans)
|
|
||||||
elif class_name == Event.__name__:
|
|
||||||
event = db.get_event_from_handle(handle)
|
|
||||||
assert(event.has_citation_reference(old_handle))
|
|
||||||
event.replace_citation_references(old_handle, new_handle)
|
|
||||||
db.commit_event(event, trans)
|
|
||||||
elif class_name == Place.__name__:
|
|
||||||
place = db.get_place_from_handle(handle)
|
|
||||||
assert(place.has_citation_reference(old_handle))
|
|
||||||
place.replace_citation_references(old_handle, new_handle)
|
|
||||||
db.commit_place(place, trans)
|
|
||||||
elif class_name == MediaObject.__name__:
|
|
||||||
obj = db.get_object_from_handle(handle)
|
|
||||||
assert(obj.has_citation_reference(old_handle))
|
|
||||||
obj.replace_citation_references(old_handle, new_handle)
|
|
||||||
db.commit_media_object(obj, trans)
|
|
||||||
elif class_name == Repository.__name__:
|
|
||||||
repository = db.get_repository_from_handle(handle)
|
|
||||||
assert(repository.has_citation_reference(old_handle))
|
|
||||||
repository.replace_citation_references(old_handle, new_handle)
|
|
||||||
db.commit_repository(repository, trans)
|
|
||||||
else:
|
|
||||||
raise MergeError("Encountered an object of type %s that has "
|
|
||||||
"a citation reference." % class_name)
|
|
||||||
db.remove_citation(old_handle, trans)
|
|
||||||
|
|
||||||
#------------------------------------------------------------------------
|
#------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
|
Loading…
Reference in New Issue
Block a user