(find_backlink_handles): Work around readonly db problems;

(_get_obj_from_gramps_id): Work around readonly db problems.


svn: r7087
This commit is contained in:
Alex Roitman 2006-07-28 04:10:43 +00:00
parent 03e50b3e3a
commit f3cf9b0aa3
2 changed files with 34 additions and 10 deletions

View File

@ -2,6 +2,8 @@
* src/GrampsDb/_ReadGrdb.py: Re-map name formats on import. * src/GrampsDb/_ReadGrdb.py: Re-map name formats on import.
* src/GrampsDb/_GrampsBSDDB.py (_load_metadata): Upgrade custom * src/GrampsDb/_GrampsBSDDB.py (_load_metadata): Upgrade custom
name formats. name formats.
(find_backlink_handles): Work around readonly db problems;
(_get_obj_from_gramps_id): Work around readonly db problems.
* src/GrampsDb/_ReadXML.py (start_format): Attempt parsing the * src/GrampsDb/_ReadXML.py (start_format): Attempt parsing the
active state for the custom name format; re-map format numbers on active state for the custom name format; re-map format numbers on
import. import.

View File

@ -599,6 +599,13 @@ class GrampsBSDDB(GrampsDbBase,UpdateCallback):
# (referenced_object_class_name, referenced_object_handle)) # (referenced_object_class_name, referenced_object_handle))
# so we need the first tuple to give us the type to compare # so we need the first tuple to give us the type to compare
### FIXME: this is a dirty hack that works without no
### sensible explanation. For some reason, for a readonly
### database, secondary index returns a primary table key
### corresponding to the data, not the data.
if self.readonly:
data = self.reference_map.get(data)
else:
data = pickle.loads(data) data = pickle.loads(data)
if include_classes == None or \ if include_classes == None or \
KEY_TO_CLASS_MAP[data[0][0]] in include_classes: KEY_TO_CLASS_MAP[data[0][0]] in include_classes:
@ -985,11 +992,19 @@ class GrampsBSDDB(GrampsDbBase,UpdateCallback):
vals.sort() vals.sort()
return [item[1] for item in vals] return [item[1] for item in vals]
def _get_obj_from_gramps_id(self,val,tbl,class_init): def _get_obj_from_gramps_id(self,val,tbl,class_init,prim_tbl):
if tbl.has_key(str(val)): if tbl.has_key(str(val)):
data = tbl.get(str(val),txn=self.txn) data = tbl.get(str(val),txn=self.txn)
obj = class_init() obj = class_init()
obj.unserialize(pickle.loads(data)) ### FIXME: this is a dirty hack that works without no
### sensible explanation. For some reason, for a readonly
### database, secondary index returns a primary table key
### corresponding to the data, not the data.
if self.readonly:
tuple_data = prim_tbl.get(data,txn=self.txn)
else:
tuple_data = pickle.loads(data)
obj.unserialize(tuple_data)
return obj return obj
else: else:
return None return None
@ -999,49 +1014,56 @@ class GrampsBSDDB(GrampsDbBase,UpdateCallback):
Finds a Person in the database from the passed gramps' ID. Finds a Person in the database from the passed gramps' ID.
If no such Person exists, None is returned. If no such Person exists, None is returned.
""" """
return self._get_obj_from_gramps_id(val,self.id_trans,Person) return self._get_obj_from_gramps_id(val,self.id_trans,Person,
self.person_map)
def get_family_from_gramps_id(self,val): def get_family_from_gramps_id(self,val):
""" """
Finds a Family in the database from the passed gramps' ID. Finds a Family in the database from the passed gramps' ID.
If no such Family exists, None is return. If no such Family exists, None is return.
""" """
return self._get_obj_from_gramps_id(val,self.fid_trans,Family) return self._get_obj_from_gramps_id(val,self.fid_trans,Family,
self.family_map)
def get_event_from_gramps_id(self,val): def get_event_from_gramps_id(self,val):
""" """
Finds an Event in the database from the passed gramps' ID. Finds an Event in the database from the passed gramps' ID.
If no such Family exists, None is returned. If no such Family exists, None is returned.
""" """
return self._get_obj_from_gramps_id(val,self.eid_trans,Event) return self._get_obj_from_gramps_id(val,self.eid_trans,Event,
self.event_map)
def get_place_from_gramps_id(self,val): def get_place_from_gramps_id(self,val):
""" """
Finds a Place in the database from the passed gramps' ID. Finds a Place in the database from the passed gramps' ID.
If no such Place exists, None is returned. If no such Place exists, None is returned.
""" """
return self._get_obj_from_gramps_id(val,self.pid_trans,Place) return self._get_obj_from_gramps_id(val,self.pid_trans,Place,
self.place_map)
def get_source_from_gramps_id(self,val): def get_source_from_gramps_id(self,val):
""" """
Finds a Source in the database from the passed gramps' ID. Finds a Source in the database from the passed gramps' ID.
If no such Source exists, None is returned. If no such Source exists, None is returned.
""" """
return self._get_obj_from_gramps_id(val,self.sid_trans,Source) return self._get_obj_from_gramps_id(val,self.sid_trans,Source,
self.source_map)
def get_object_from_gramps_id(self,val): def get_object_from_gramps_id(self,val):
""" """
Finds a MediaObject in the database from the passed gramps' ID. Finds a MediaObject in the database from the passed gramps' ID.
If no such MediaObject exists, None is returned. If no such MediaObject exists, None is returned.
""" """
return self._get_obj_from_gramps_id(val,self.oid_trans,MediaObject) return self._get_obj_from_gramps_id(val,self.oid_trans,MediaObject,
self.media_map)
def get_repository_from_gramps_id(self,val): def get_repository_from_gramps_id(self,val):
""" """
Finds a Repository in the database from the passed gramps' ID. Finds a Repository in the database from the passed gramps' ID.
If no such MediaObject exists, None is returned. If no such MediaObject exists, None is returned.
""" """
return self._get_obj_from_gramps_id(val,self.rid_trans,Repository) return self._get_obj_from_gramps_id(val,self.rid_trans,Repository,
self.repository_map)
def _commit_base(self, obj, data_map, key, update_list, add_list, def _commit_base(self, obj, data_map, key, update_list, add_list,
transaction, change_time): transaction, change_time):