2007-10-09 Benny Malengier <benny.malengier@gramps-project.org>

* src/gen/db/base.py: allow not to create gramps_id on add
	* src/GrampsDbUtils/_ReadXML.py: on sourceref, don't create gramps_id
	* src/GrampsDb/_GrampsInMemDB.py: remove gid from memory map only if not None


svn: r9119
This commit is contained in:
Benny Malengier 2007-10-09 20:02:02 +00:00
parent 96c5584960
commit 967ef1c163
4 changed files with 97 additions and 40 deletions

View File

@ -1,3 +1,8 @@
2007-10-09 Benny Malengier <benny.malengier@gramps-project.org>
* src/gen/db/base.py: allow not to create gramps_id on add
* src/GrampsDbUtils/_ReadXML.py: on sourceref, don't create gramps_id
* src/GrampsDb/_GrampsInMemDB.py: remove gid from memory map only if not None
2007-10-09 Benny Malengier <benny.malengier@gramps-project.org> 2007-10-09 Benny Malengier <benny.malengier@gramps-project.org>
* src/GrampsDb/_GrampsInMemDB.py: correctly store global name grouping * src/GrampsDb/_GrampsInMemDB.py: correctly store global name grouping
* src/GrampsDb/_GrampsBSDDB.py: correctly store global name grouping * src/GrampsDb/_GrampsBSDDB.py: correctly store global name grouping

View File

@ -252,7 +252,7 @@ class GrampsInMemDB(GrampsDbBase):
old_data = db_map.get(obj.handle) old_data = db_map.get(obj.handle)
if old_data: if old_data:
old_id = old_data[self.ID_INDEX] old_id = old_data[self.ID_INDEX]
if obj.gramps_id != old_id: if old_id is not None and obj.gramps_id != old_id:
del trans_map[old_id] del trans_map[old_id]
trans_map[gid] = obj.handle trans_map[gid] = obj.handle
return True return True

View File

@ -1265,7 +1265,9 @@ class GrampsParser(UpdateCallback):
self.source_ref = gen.lib.SourceRef() self.source_ref = gen.lib.SourceRef()
try: try:
handle = attrs["hlink"].replace('_', '') handle = attrs["hlink"].replace('_', '')
self.db.check_source_from_handle(handle, self.trans) #create source object to obtain handle, gid is set in start_source
self.db.check_source_from_handle(handle, self.trans,
set_gid = False)
except KeyError: except KeyError:
source = self.find_source_by_gramps_id(self.map_sid(attrs["ref"])) source = self.find_source_by_gramps_id(self.map_sid(attrs["ref"]))
handle = source.handle handle = source.handle

View File

@ -260,7 +260,7 @@ class GrampsDbBase(GrampsDBCallback):
self.repo_bookmarks = GrampsDbBookmarks() self.repo_bookmarks = GrampsDbBookmarks()
self.media_bookmarks = GrampsDbBookmarks() self.media_bookmarks = GrampsDbBookmarks()
self.note_bookmarks = GrampsDbBookmarks() self.note_bookmarks = GrampsDbBookmarks()
self._bm_changes = 0 self._bm_changes = 0
self.path = "" self.path = ""
self.name_group = {} self.name_group = {}
self.surname_list = [] self.surname_list = []
@ -816,12 +816,12 @@ class GrampsDbBase(GrampsDBCallback):
return obj return obj
def __check_from_handle(self, handle, transaction, class_type, dmap, def __check_from_handle(self, handle, transaction, class_type, dmap,
add_func): add_func, set_gid=True):
handle = str(handle) handle = str(handle)
if not dmap.has_key(handle): if not dmap.has_key(handle):
obj = class_type() obj = class_type()
obj.set_handle(handle) obj.set_handle(handle)
add_func(obj, transaction) add_func(obj, transaction, set_gid=set_gid)
def find_person_from_handle(self, handle, transaction): def find_person_from_handle(self, handle, transaction):
""" """
@ -895,14 +895,16 @@ class GrampsDbBase(GrampsDBCallback):
self.__check_from_handle(handle, transaction, Person, self.__check_from_handle(handle, transaction, Person,
self.person_map, self.add_person) self.person_map, self.add_person)
def check_source_from_handle(self, handle, transaction): def check_source_from_handle(self, handle, transaction, set_gid=True):
""" """
Checks whether a Source with the passed handle exists in the database. Checks whether a Source with the passed handle exists in the database.
If no such Source exists, a new Source is added to the database. If no such Source exists, a new Source is added to the database.
If set_gid then a new gramps_id is created, if not, None is used.
""" """
self.__check_from_handle(handle, transaction, Source, self.__check_from_handle(handle, transaction, Source,
self.source_map, self.add_source) self.source_map, self.add_source,
set_gid=set_gid)
def check_event_from_handle(self, handle, transaction): def check_event_from_handle(self, handle, transaction):
""" """
Checks whether an Event with the passed handle exists in the database. Checks whether an Event with the passed handle exists in the database.
@ -1028,7 +1030,7 @@ class GrampsDbBase(GrampsDBCallback):
raise NotImplementedError raise NotImplementedError
def __add_object(self, obj, transaction, find_next_func, commit_func): def __add_object(self, obj, transaction, find_next_func, commit_func):
if not obj.gramps_id: if find_next_func and not obj.gramps_id:
obj.gramps_id = find_next_func() obj.gramps_id = find_next_func()
if not obj.handle: if not obj.handle:
obj.handle = self.create_id() obj.handle = self.create_id()
@ -1037,41 +1039,65 @@ class GrampsDbBase(GrampsDBCallback):
self.genderStats.count_person (obj) self.genderStats.count_person (obj)
return obj.handle return obj.handle
def add_person(self, person, transaction): def add_person(self, person, transaction, set_gid=True):
""" """
Adds a Person to the database, assigning internal IDs if they have Adds a Person to the database, assigning internal IDs if they have
not already been defined. not already been defined.
If not set_gid, then gramps_id is not set
""" """
return self.__add_object(person, transaction, if set_gid:
self.find_next_person_gramps_id, return self.__add_object(person, transaction,
self.commit_person) self.find_next_person_gramps_id,
self.commit_person)
else:
return self.__add_object(person, transaction,
None,
self.commit_person)
def add_family(self, family, transaction): def add_family(self, family, transaction, set_gid=True):
""" """
Adds a Family to the database, assigning internal IDs if they have Adds a Family to the database, assigning internal IDs if they have
not already been defined. not already been defined.
If not set_gid, then gramps_id is not set
""" """
return self.__add_object(family, transaction, if set_gid:
self.find_next_family_gramps_id, return self.__add_object(family, transaction,
self.commit_family) self.find_next_family_gramps_id,
self.commit_family)
else:
return self.__add_object(family, transaction,
None,
self.commit_family)
def add_source(self, source, transaction): def add_source(self, source, transaction, set_gid=True):
""" """
Adds a Source to the database, assigning internal IDs if they have Adds a Source to the database, assigning internal IDs if they have
not already been defined. not already been defined.
If not set_gid, then gramps_id is not set
""" """
return self.__add_object(source, transaction, if set_gid:
self.find_next_source_gramps_id, return self.__add_object(source, transaction,
self.find_next_source_gramps_id,
self.commit_source)
else :
return self.__add_object(source, transaction,
None,
self.commit_source) self.commit_source)
def add_event(self, event, transaction): def add_event(self, event, transaction, set_gid=True):
""" """
Adds an Event to the database, assigning internal IDs if they have Adds an Event to the database, assigning internal IDs if they have
not already been defined. not already been defined.
If not set_gid, then gramps_id is not set
""" """
return self.__add_object(event, transaction, if set_gid:
self.find_next_event_gramps_id, return self.__add_object(event, transaction,
self.commit_event) self.find_next_event_gramps_id,
self.commit_event)
else:
return self.__add_object(event, transaction,
None,
self.commit_event)
def add_person_event(self, event, transaction): def add_person_event(self, event, transaction):
""" """
@ -1091,41 +1117,65 @@ class GrampsDbBase(GrampsDBCallback):
self.family_event_names.add(str(event.type)) self.family_event_names.add(str(event.type))
return self.add_event(event, transaction) return self.add_event(event, transaction)
def add_place(self, place, transaction): def add_place(self, place, transaction, set_gid=True):
""" """
Adds a Place to the database, assigning internal IDs if they have Adds a Place to the database, assigning internal IDs if they have
not already been defined. not already been defined.
If not set_gid, then gramps_id is not set
""" """
return self.__add_object(place, transaction, if set_gid:
self.find_next_place_gramps_id, return self.__add_object(place, transaction,
self.commit_place) self.find_next_place_gramps_id,
self.commit_place)
else:
return self.__add_object(place, transaction,
None,
self.commit_place)
def add_object(self, obj, transaction): def add_object(self, obj, transaction, set_gid=True):
""" """
Adds a MediaObject to the database, assigning internal IDs if they have Adds a MediaObject to the database, assigning internal IDs if they have
not already been defined. not already been defined.
If not set_gid, then gramps_id is not set
""" """
return self.__add_object(obj, transaction, if set_gid:
self.find_next_object_gramps_id, return self.__add_object(obj, transaction,
self.commit_media_object) self.find_next_object_gramps_id,
self.commit_media_object)
else:
return self.__add_object(obj, transaction,
None,
self.commit_media_object)
def add_repository(self, obj, transaction): def add_repository(self, obj, transaction, set_gid=True):
""" """
Adds a Repository to the database, assigning internal IDs if they have Adds a Repository to the database, assigning internal IDs if they have
not already been defined. not already been defined.
If not set_gid, then gramps_id is not set
""" """
return self.__add_object(obj, transaction, if set_gid:
self.find_next_repository_gramps_id, return self.__add_object(obj, transaction,
self.commit_repository) self.find_next_repository_gramps_id,
self.commit_repository)
else:
return self.__add_object(obj, transaction,
None,
self.commit_repository)
def add_note(self, obj, transaction): def add_note(self, obj, transaction, set_gid=True):
""" """
Adds a Note to the database, assigning internal IDs if they have Adds a Note to the database, assigning internal IDs if they have
not already been defined. not already been defined.
If not set_gid, then gramps_id is not set
""" """
return self.__add_object(obj, transaction, if set_gid:
self.find_next_note_gramps_id, return self.__add_object(obj, transaction,
self.commit_note) self.find_next_note_gramps_id,
self.commit_note)
else:
return self.__add_object(obj, transaction,
None,
self.commit_note)
def get_name_group_mapping(self, name): def get_name_group_mapping(self, name):
""" """