Don't repeatedly check for existing records; whitespace cleanup

This commit is contained in:
Doug Blank
2015-08-21 08:14:11 -04:00
parent 5bb4021b2a
commit ccbed9cb95

View File

@@ -43,7 +43,7 @@ import gramps
from gramps.gen.const import GRAMPS_LOCALE as glocale from gramps.gen.const import GRAMPS_LOCALE as glocale
_ = glocale.translation.gettext _ = glocale.translation.gettext
from gramps.gen.db import (DbReadBase, DbWriteBase, DbTxn, DbUndo, from gramps.gen.db import (DbReadBase, DbWriteBase, DbTxn, DbUndo,
KEY_TO_NAME_MAP, KEY_TO_CLASS_MAP, KEY_TO_NAME_MAP, KEY_TO_CLASS_MAP,
CLASS_TO_KEY_MAP, TXNADD, TXNUPD, TXNDEL) CLASS_TO_KEY_MAP, TXNADD, TXNUPD, TXNDEL)
from gramps.gen.utils.callback import Callback from gramps.gen.utils.callback import Callback
from gramps.gen.updatecallback import UpdateCallback from gramps.gen.updatecallback import UpdateCallback
@@ -93,39 +93,39 @@ class DbGenericUndo(DbUndo):
""" """
Close the backing storage. Needs to be overridden in the derived Close the backing storage. Needs to be overridden in the derived
class. class.
""" """
pass pass
def append(self, value): def append(self, value):
""" """
Add a new entry on the end. Needs to be overridden in the derived Add a new entry on the end. Needs to be overridden in the derived
class. class.
""" """
self.undodb.append(value) self.undodb.append(value)
def __getitem__(self, index): def __getitem__(self, index):
""" """
Returns an entry by index number. Needs to be overridden in the Returns an entry by index number. Needs to be overridden in the
derived class. derived class.
""" """
return self.undodb[index] return self.undodb[index]
def __setitem__(self, index, value): def __setitem__(self, index, value):
""" """
Set an entry to a value. Needs to be overridden in the derived class. Set an entry to a value. Needs to be overridden in the derived class.
""" """
self.undodb[index] = value self.undodb[index] = value
def __len__(self): def __len__(self):
""" """
Returns the number of entries. Needs to be overridden in the derived Returns the number of entries. Needs to be overridden in the derived
class. class.
""" """
return len(self.undodb) return len(self.undodb)
def _redo(self, update_history): def _redo(self, update_history):
""" """
Access the last undone transaction, and revert the data to the state Access the last undone transaction, and revert the data to the state
before the transaction was undone. before the transaction was undone.
""" """
txn = self.redoq.pop() txn = self.redoq.pop()
@@ -155,15 +155,15 @@ class DbGenericUndo(DbUndo):
db.redo_callback(_("_Redo %s") db.redo_callback(_("_Redo %s")
% new_transaction.get_description()) % new_transaction.get_description())
else: else:
db.redo_callback(None) db.redo_callback(None)
if update_history and db.undo_history_callback: if update_history and db.undo_history_callback:
db.undo_history_callback() db.undo_history_callback()
return True return True
def _undo(self, update_history): def _undo(self, update_history):
""" """
Access the last committed transaction, and revert the data to the Access the last committed transaction, and revert the data to the
state before the transaction was committed. state before the transaction was committed.
""" """
txn = self.undoq.pop() txn = self.undoq.pop()
@@ -188,7 +188,7 @@ class DbGenericUndo(DbUndo):
db.undo_callback(_("_Undo %s") db.undo_callback(_("_Undo %s")
% self.undoq[-1].get_description()) % self.undoq[-1].get_description())
else: else:
db.undo_callback(None) db.undo_callback(None)
if db.redo_callback: if db.redo_callback:
db.redo_callback(_("_Redo %s") db.redo_callback(_("_Redo %s")
@@ -235,11 +235,11 @@ class Table(object):
class Map(object): class Map(object):
""" """
Implements the map API for person_map, etc. Implements the map API for person_map, etc.
Takes a Table() as argument. Takes a Table() as argument.
""" """
def __init__(self, table, def __init__(self, table,
keys_func="handles_func", keys_func="handles_func",
contains_func="has_handle_func", contains_func="has_handle_func",
raw_func="raw_func", raw_func="raw_func",
*args, **kwargs): *args, **kwargs):
@@ -382,7 +382,7 @@ class Bookmarks(object):
def close(self): def close(self):
del self.handles del self.handles
class DbGenericTxn(DbTxn): class DbGenericTxn(DbTxn):
def __init__(self, message, db, batch=False): def __init__(self, message, db, batch=False):
@@ -415,7 +415,7 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
[(list,), (list,), (list,), None] [(list,), (list,), (list,), None]
) )
) )
# 2. Signals for long operations # 2. Signals for long operations
__signals__.update(('long-op-'+op, signal) for op, signal in zip( __signals__.update(('long-op-'+op, signal) for op, signal in zip(
['start', 'heartbeat', 'end'], ['start', 'heartbeat', 'end'],
@@ -436,7 +436,7 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
Callback.__init__(self) Callback.__init__(self)
self._tables['Person'].update( self._tables['Person'].update(
{ {
"handle_func": self.get_person_from_handle, "handle_func": self.get_person_from_handle,
"gramps_id_func": self.get_person_from_gramps_id, "gramps_id_func": self.get_person_from_gramps_id,
"class_func": Person, "class_func": Person,
"cursor_func": self.get_person_cursor, "cursor_func": self.get_person_cursor,
@@ -454,7 +454,7 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
}) })
self._tables['Family'].update( self._tables['Family'].update(
{ {
"handle_func": self.get_family_from_handle, "handle_func": self.get_family_from_handle,
"gramps_id_func": self.get_family_from_gramps_id, "gramps_id_func": self.get_family_from_gramps_id,
"class_func": Family, "class_func": Family,
"cursor_func": self.get_family_cursor, "cursor_func": self.get_family_cursor,
@@ -472,7 +472,7 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
}) })
self._tables['Source'].update( self._tables['Source'].update(
{ {
"handle_func": self.get_source_from_handle, "handle_func": self.get_source_from_handle,
"gramps_id_func": self.get_source_from_gramps_id, "gramps_id_func": self.get_source_from_gramps_id,
"class_func": Source, "class_func": Source,
"cursor_func": self.get_source_cursor, "cursor_func": self.get_source_cursor,
@@ -490,7 +490,7 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
}) })
self._tables['Citation'].update( self._tables['Citation'].update(
{ {
"handle_func": self.get_citation_from_handle, "handle_func": self.get_citation_from_handle,
"gramps_id_func": self.get_citation_from_gramps_id, "gramps_id_func": self.get_citation_from_gramps_id,
"class_func": Citation, "class_func": Citation,
"cursor_func": self.get_citation_cursor, "cursor_func": self.get_citation_cursor,
@@ -508,7 +508,7 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
}) })
self._tables['Event'].update( self._tables['Event'].update(
{ {
"handle_func": self.get_event_from_handle, "handle_func": self.get_event_from_handle,
"gramps_id_func": self.get_event_from_gramps_id, "gramps_id_func": self.get_event_from_gramps_id,
"class_func": Event, "class_func": Event,
"cursor_func": self.get_event_cursor, "cursor_func": self.get_event_cursor,
@@ -526,7 +526,7 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
}) })
self._tables['Media'].update( self._tables['Media'].update(
{ {
"handle_func": self.get_object_from_handle, "handle_func": self.get_object_from_handle,
"gramps_id_func": self.get_object_from_gramps_id, "gramps_id_func": self.get_object_from_gramps_id,
"class_func": MediaObject, "class_func": MediaObject,
"cursor_func": self.get_media_cursor, "cursor_func": self.get_media_cursor,
@@ -544,7 +544,7 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
}) })
self._tables['Place'].update( self._tables['Place'].update(
{ {
"handle_func": self.get_place_from_handle, "handle_func": self.get_place_from_handle,
"gramps_id_func": self.get_place_from_gramps_id, "gramps_id_func": self.get_place_from_gramps_id,
"class_func": Place, "class_func": Place,
"cursor_func": self.get_place_cursor, "cursor_func": self.get_place_cursor,
@@ -562,7 +562,7 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
}) })
self._tables['Repository'].update( self._tables['Repository'].update(
{ {
"handle_func": self.get_repository_from_handle, "handle_func": self.get_repository_from_handle,
"gramps_id_func": self.get_repository_from_gramps_id, "gramps_id_func": self.get_repository_from_gramps_id,
"class_func": Repository, "class_func": Repository,
"cursor_func": self.get_repository_cursor, "cursor_func": self.get_repository_cursor,
@@ -580,7 +580,7 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
}) })
self._tables['Note'].update( self._tables['Note'].update(
{ {
"handle_func": self.get_note_from_handle, "handle_func": self.get_note_from_handle,
"gramps_id_func": self.get_note_from_gramps_id, "gramps_id_func": self.get_note_from_gramps_id,
"class_func": Note, "class_func": Note,
"cursor_func": self.get_note_cursor, "cursor_func": self.get_note_cursor,
@@ -598,7 +598,7 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
}) })
self._tables['Tag'].update( self._tables['Tag'].update(
{ {
"handle_func": self.get_tag_from_handle, "handle_func": self.get_tag_from_handle,
"gramps_id_func": None, "gramps_id_func": None,
"class_func": Tag, "class_func": Tag,
"cursor_func": self.get_tag_cursor, "cursor_func": self.get_tag_cursor,
@@ -647,7 +647,7 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
self.oid_trans = DbGenericTxn("OID Transaction", self) self.oid_trans = DbGenericTxn("OID Transaction", self)
self.rid_trans = DbGenericTxn("RID Transaction", self) self.rid_trans = DbGenericTxn("RID Transaction", self)
self.nid_trans = DbGenericTxn("NID Transaction", self) self.nid_trans = DbGenericTxn("NID Transaction", self)
self.eid_trans = DbGenericTxn("EID Transaction", self) self.eid_trans = DbGenericTxn("EID Transaction", self)
self.cmap_index = 0 self.cmap_index = 0
self.smap_index = 0 self.smap_index = 0
self.emap_index = 0 self.emap_index = 0
@@ -699,7 +699,7 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
contains_func="has_gramps_id_func", contains_func="has_gramps_id_func",
raw_func="raw_id_func") raw_func="raw_id_func")
self.event_map = Map(Table(self, "Event")) self.event_map = Map(Table(self, "Event"))
self.event_id_map = Map(Table(self, "Event"), self.event_id_map = Map(Table(self, "Event"),
keys_func="ids_func", keys_func="ids_func",
contains_func="has_gramps_id_func", contains_func="has_gramps_id_func",
raw_func="raw_id_func") raw_func="raw_id_func")
@@ -720,10 +720,10 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
if directory: if directory:
self.load(directory) self.load(directory)
def load(self, directory, callback=None, mode=None, def load(self, directory, callback=None, mode=None,
force_schema_upgrade=False, force_schema_upgrade=False,
force_bsddb_upgrade=False, force_bsddb_upgrade=False,
force_bsddb_downgrade=False, force_bsddb_downgrade=False,
force_python_upgrade=False): force_python_upgrade=False):
# run backend-specific code: # run backend-specific code:
self.initialize_backend(directory) self.initialize_backend(directory)
@@ -761,7 +761,7 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
self.media_attributes = self.get_metadata('mattr_names', set()) self.media_attributes = self.get_metadata('mattr_names', set())
self.event_attributes = self.get_metadata('eattr_names', set()) self.event_attributes = self.get_metadata('eattr_names', set())
self.place_types = self.get_metadata('place_types', set()) self.place_types = self.get_metadata('place_types', set())
# surname list # surname list
self.surname_list = self.get_surname_list() self.surname_list = self.get_surname_list()
@@ -775,7 +775,7 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
# Other items to load # Other items to load
gstats = self.get_gender_stats() gstats = self.get_gender_stats()
self.genderStats = GenderStats(gstats) self.genderStats = GenderStats(gstats)
# Indexes: # Indexes:
self.cmap_index = self.get_metadata('cmap_index', 0) self.cmap_index = self.get_metadata('cmap_index', 0)
@@ -826,7 +826,7 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
if self.redo_callback: if self.redo_callback:
self.redo_callback(None) self.redo_callback(None)
if self.undo_history_callback: if self.undo_history_callback:
self.undo_history_callback() self.undo_history_callback()
@staticmethod @staticmethod
def _validated_id_prefix(val, default): def _validated_id_prefix(val, default):
@@ -877,10 +877,10 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
def set_person_id_prefix(self, val): def set_person_id_prefix(self, val):
""" """
Set the naming template for GRAMPS Person ID values. Set the naming template for GRAMPS Person ID values.
The string is expected to be in the form of a simple text string, or The string is expected to be in the form of a simple text string, or
in a format that contains a C/Python style format string using %d, in a format that contains a C/Python style format string using %d,
such as I%d or I%04d. such as I%d or I%04d.
""" """
self.person_prefix = self._validated_id_prefix(val, "I") self.person_prefix = self._validated_id_prefix(val, "I")
@@ -888,32 +888,32 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
def set_citation_id_prefix(self, val): def set_citation_id_prefix(self, val):
""" """
Set the naming template for GRAMPS Citation ID values. Set the naming template for GRAMPS Citation ID values.
The string is expected to be in the form of a simple text string, or The string is expected to be in the form of a simple text string, or
in a format that contains a C/Python style format string using %d, in a format that contains a C/Python style format string using %d,
such as C%d or C%04d. such as C%d or C%04d.
""" """
self.citation_prefix = self._validated_id_prefix(val, "C") self.citation_prefix = self._validated_id_prefix(val, "C")
self.cid2user_format = self.__id2user_format(self.citation_prefix) self.cid2user_format = self.__id2user_format(self.citation_prefix)
def set_source_id_prefix(self, val): def set_source_id_prefix(self, val):
""" """
Set the naming template for GRAMPS Source ID values. Set the naming template for GRAMPS Source ID values.
The string is expected to be in the form of a simple text string, or The string is expected to be in the form of a simple text string, or
in a format that contains a C/Python style format string using %d, in a format that contains a C/Python style format string using %d,
such as S%d or S%04d. such as S%d or S%04d.
""" """
self.source_prefix = self._validated_id_prefix(val, "S") self.source_prefix = self._validated_id_prefix(val, "S")
self.sid2user_format = self.__id2user_format(self.source_prefix) self.sid2user_format = self.__id2user_format(self.source_prefix)
def set_object_id_prefix(self, val): def set_object_id_prefix(self, val):
""" """
Set the naming template for GRAMPS MediaObject ID values. Set the naming template for GRAMPS MediaObject ID values.
The string is expected to be in the form of a simple text string, or The string is expected to be in the form of a simple text string, or
in a format that contains a C/Python style format string using %d, in a format that contains a C/Python style format string using %d,
such as O%d or O%04d. such as O%d or O%04d.
""" """
self.mediaobject_prefix = self._validated_id_prefix(val, "O") self.mediaobject_prefix = self._validated_id_prefix(val, "O")
@@ -921,10 +921,10 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
def set_place_id_prefix(self, val): def set_place_id_prefix(self, val):
""" """
Set the naming template for GRAMPS Place ID values. Set the naming template for GRAMPS Place ID values.
The string is expected to be in the form of a simple text string, or The string is expected to be in the form of a simple text string, or
in a format that contains a C/Python style format string using %d, in a format that contains a C/Python style format string using %d,
such as P%d or P%04d. such as P%d or P%04d.
""" """
self.place_prefix = self._validated_id_prefix(val, "P") self.place_prefix = self._validated_id_prefix(val, "P")
@@ -942,10 +942,10 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
def set_event_id_prefix(self, val): def set_event_id_prefix(self, val):
""" """
Set the naming template for GRAMPS Event ID values. Set the naming template for GRAMPS Event ID values.
The string is expected to be in the form of a simple text string, or The string is expected to be in the form of a simple text string, or
in a format that contains a C/Python style format string using %d, in a format that contains a C/Python style format string using %d,
such as E%d or E%04d. such as E%d or E%04d.
""" """
self.event_prefix = self._validated_id_prefix(val, "E") self.event_prefix = self._validated_id_prefix(val, "E")
@@ -953,10 +953,10 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
def set_repository_id_prefix(self, val): def set_repository_id_prefix(self, val):
""" """
Set the naming template for GRAMPS Repository ID values. Set the naming template for GRAMPS Repository ID values.
The string is expected to be in the form of a simple text string, or The string is expected to be in the form of a simple text string, or
in a format that contains a C/Python style format string using %d, in a format that contains a C/Python style format string using %d,
such as R%d or R%04d. such as R%d or R%04d.
""" """
self.repository_prefix = self._validated_id_prefix(val, "R") self.repository_prefix = self._validated_id_prefix(val, "R")
@@ -964,10 +964,10 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
def set_note_id_prefix(self, val): def set_note_id_prefix(self, val):
""" """
Set the naming template for GRAMPS Note ID values. Set the naming template for GRAMPS Note ID values.
The string is expected to be in the form of a simple text string, or The string is expected to be in the form of a simple text string, or
in a format that contains a C/Python style format string using %d, in a format that contains a C/Python style format string using %d,
such as N%d or N%04d. such as N%d or N%04d.
""" """
self.note_prefix = self._validated_id_prefix(val, "N") self.note_prefix = self._validated_id_prefix(val, "N")
@@ -983,34 +983,34 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
index = prefix % map_index index = prefix % map_index
map_index += 1 map_index += 1
return (map_index, index) return (map_index, index)
def find_next_person_gramps_id(self): def find_next_person_gramps_id(self):
""" """
Return the next available GRAMPS' ID for a Person object based off the Return the next available GRAMPS' ID for a Person object based off the
person ID prefix. person ID prefix.
""" """
self.pmap_index, gid = self._find_next_gramps_id(self.person_prefix, self.pmap_index, gid = self._find_next_gramps_id(self.person_prefix,
self.pmap_index, self.pmap_index,
self.person_id_map) self.person_id_map)
return gid return gid
def find_next_place_gramps_id(self): def find_next_place_gramps_id(self):
""" """
Return the next available GRAMPS' ID for a Place object based off the Return the next available GRAMPS' ID for a Place object based off the
place ID prefix. place ID prefix.
""" """
self.lmap_index, gid = self._find_next_gramps_id(self.place_prefix, self.lmap_index, gid = self._find_next_gramps_id(self.place_prefix,
self.lmap_index, self.lmap_index,
self.place_id_map) self.place_id_map)
return gid return gid
def find_next_event_gramps_id(self): def find_next_event_gramps_id(self):
""" """
Return the next available GRAMPS' ID for a Event object based off the Return the next available GRAMPS' ID for a Event object based off the
event ID prefix. event ID prefix.
""" """
self.emap_index, gid = self._find_next_gramps_id(self.event_prefix, self.emap_index, gid = self._find_next_gramps_id(self.event_prefix,
self.emap_index, self.emap_index,
self.event_id_map) self.event_id_map)
return gid return gid
@@ -1020,57 +1020,57 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
off the media object ID prefix. off the media object ID prefix.
""" """
self.omap_index, gid = self._find_next_gramps_id(self.mediaobject_prefix, self.omap_index, gid = self._find_next_gramps_id(self.mediaobject_prefix,
self.omap_index, self.omap_index,
self.media_id_map) self.media_id_map)
return gid return gid
def find_next_citation_gramps_id(self): def find_next_citation_gramps_id(self):
""" """
Return the next available GRAMPS' ID for a Citation object based off the Return the next available GRAMPS' ID for a Citation object based off the
citation ID prefix. citation ID prefix.
""" """
self.cmap_index, gid = self._find_next_gramps_id(self.citation_prefix, self.cmap_index, gid = self._find_next_gramps_id(self.citation_prefix,
self.cmap_index, self.cmap_index,
self.citation_id_map) self.citation_id_map)
return gid return gid
def find_next_source_gramps_id(self): def find_next_source_gramps_id(self):
""" """
Return the next available GRAMPS' ID for a Source object based off the Return the next available GRAMPS' ID for a Source object based off the
source ID prefix. source ID prefix.
""" """
self.smap_index, gid = self._find_next_gramps_id(self.source_prefix, self.smap_index, gid = self._find_next_gramps_id(self.source_prefix,
self.smap_index, self.smap_index,
self.source_id_map) self.source_id_map)
return gid return gid
def find_next_family_gramps_id(self): def find_next_family_gramps_id(self):
""" """
Return the next available GRAMPS' ID for a Family object based off the Return the next available GRAMPS' ID for a Family object based off the
family ID prefix. family ID prefix.
""" """
self.fmap_index, gid = self._find_next_gramps_id(self.family_prefix, self.fmap_index, gid = self._find_next_gramps_id(self.family_prefix,
self.fmap_index, self.fmap_index,
self.family_id_map) self.family_id_map)
return gid return gid
def find_next_repository_gramps_id(self): def find_next_repository_gramps_id(self):
""" """
Return the next available GRAMPS' ID for a Respository object based Return the next available GRAMPS' ID for a Respository object based
off the repository ID prefix. off the repository ID prefix.
""" """
self.rmap_index, gid = self._find_next_gramps_id(self.repository_prefix, self.rmap_index, gid = self._find_next_gramps_id(self.repository_prefix,
self.rmap_index, self.rmap_index,
self.repository_id_map) self.repository_id_map)
return gid return gid
def find_next_note_gramps_id(self): def find_next_note_gramps_id(self):
""" """
Return the next available GRAMPS' ID for a Note object based off the Return the next available GRAMPS' ID for a Note object based off the
note ID prefix. note ID prefix.
""" """
self.nmap_index, gid = self._find_next_gramps_id(self.note_prefix, self.nmap_index, gid = self._find_next_gramps_id(self.note_prefix,
self.nmap_index, self.nmap_index,
self.note_id_map) self.note_id_map)
return gid return gid
@@ -1083,87 +1083,55 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
def get_event_from_handle(self, handle): def get_event_from_handle(self, handle):
if isinstance(handle, bytes): if isinstance(handle, bytes):
handle = str(handle, "utf-8") handle = str(handle, "utf-8")
event = None return Event.create(self._get_raw_event_data(handle))
if handle in self.event_map:
event = Event.create(self._get_raw_event_data(handle))
return event
def get_family_from_handle(self, handle): def get_family_from_handle(self, handle):
if isinstance(handle, bytes): if isinstance(handle, bytes):
handle = str(handle, "utf-8") handle = str(handle, "utf-8")
family = None return Family.create(self._get_raw_family_data(handle))
if handle in self.family_map:
family = Family.create(self._get_raw_family_data(handle))
return family
def get_repository_from_handle(self, handle): def get_repository_from_handle(self, handle):
if isinstance(handle, bytes): if isinstance(handle, bytes):
handle = str(handle, "utf-8") handle = str(handle, "utf-8")
repository = None return Repository.create(self._get_raw_repository_data(handle))
if handle in self.repository_map:
repository = Repository.create(self._get_raw_repository_data(handle))
return repository
def get_person_from_handle(self, handle): def get_person_from_handle(self, handle):
if isinstance(handle, bytes): if isinstance(handle, bytes):
handle = str(handle, "utf-8") handle = str(handle, "utf-8")
person = None return Person.create(self._get_raw_person_data(handle))
if handle in self.person_map:
person = Person.create(self._get_raw_person_data(handle))
return person
def get_place_from_handle(self, handle): def get_place_from_handle(self, handle):
if isinstance(handle, bytes): if isinstance(handle, bytes):
handle = str(handle, "utf-8") handle = str(handle, "utf-8")
place = None return Place.create(self._get_raw_place_data(handle))
if handle in self.place_map:
place = Place.create(self._get_raw_place_data(handle))
return place
def get_citation_from_handle(self, handle): def get_citation_from_handle(self, handle):
if isinstance(handle, bytes): if isinstance(handle, bytes):
handle = str(handle, "utf-8") handle = str(handle, "utf-8")
citation = None return Citation.create(self._get_raw_citation_data(handle))
if handle in self.citation_map:
citation = Citation.create(self._get_raw_citation_data(handle))
return citation
def get_source_from_handle(self, handle): def get_source_from_handle(self, handle):
if isinstance(handle, bytes): if isinstance(handle, bytes):
handle = str(handle, "utf-8") handle = str(handle, "utf-8")
source = None return Source.create(self._get_raw_source_data(handle))
if handle in self.source_map:
source = Source.create(self._get_raw_source_data(handle))
return source
def get_note_from_handle(self, handle): def get_note_from_handle(self, handle):
if isinstance(handle, bytes): if isinstance(handle, bytes):
handle = str(handle, "utf-8") handle = str(handle, "utf-8")
note = None return Note.create(self._get_raw_note_data(handle))
if handle in self.note_map:
note = Note.create(self._get_raw_note_data(handle))
return note
def get_object_from_handle(self, handle): def get_object_from_handle(self, handle):
if isinstance(handle, bytes): if isinstance(handle, bytes):
handle = str(handle, "utf-8") handle = str(handle, "utf-8")
media = None return MediaObject.create(self._get_raw_media_data(handle))
if handle in self.media_map:
media = MediaObject.create(self._get_raw_media_data(handle))
return media
def get_object_from_gramps_id(self, gramps_id): def get_object_from_gramps_id(self, gramps_id):
if gramps_id in self.media_id_map: return MediaObject.create(self.media_id_map[gramps_id])
return MediaObject.create(self.media_id_map[gramps_id])
return None
def get_tag_from_handle(self, handle): def get_tag_from_handle(self, handle):
if isinstance(handle, bytes): if isinstance(handle, bytes):
handle = str(handle, "utf-8") handle = str(handle, "utf-8")
tag = None return Tag.create(self._get_raw_tag_data(handle))
if handle in self.tag_map:
tag = Tag.create(self._get_raw_tag_data(handle))
return tag
def get_default_person(self): def get_default_person(self):
handle = self.get_default_handle() handle = self.get_default_handle()
@@ -1179,49 +1147,31 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
return (Family.create(data[1]) for data in self.get_family_cursor()) return (Family.create(data[1]) for data in self.get_family_cursor())
def get_person_from_gramps_id(self, gramps_id): def get_person_from_gramps_id(self, gramps_id):
if gramps_id in self.person_id_map: return Person.create(self.person_id_map[gramps_id])
return Person.create(self.person_id_map[gramps_id])
return None
def get_family_from_gramps_id(self, gramps_id): def get_family_from_gramps_id(self, gramps_id):
if gramps_id in self.family_id_map: return Family.create(self.family_id_map[gramps_id])
return Family.create(self.family_id_map[gramps_id])
return None
def get_citation_from_gramps_id(self, gramps_id): def get_citation_from_gramps_id(self, gramps_id):
if gramps_id in self.citation_id_map: return Citation.create(self.citation_id_map[gramps_id])
return Citation.create(self.citation_id_map[gramps_id])
return None
def get_source_from_gramps_id(self, gramps_id): def get_source_from_gramps_id(self, gramps_id):
if gramps_id in self.source_id_map: return Source.create(self.source_id_map[gramps_id])
return Source.create(self.source_id_map[gramps_id])
return None
def get_event_from_gramps_id(self, gramps_id): def get_event_from_gramps_id(self, gramps_id):
if gramps_id in self.event_id_map: return Event.create(self.event_id_map[gramps_id])
return Event.create(self.event_id_map[gramps_id])
return None
def get_media_from_gramps_id(self, gramps_id): def get_media_from_gramps_id(self, gramps_id):
if gramps_id in self.media_id_map: return MediaObject.create(self.media_id_map[gramps_id])
return MediaObject.create(self.media_id_map[gramps_id])
return None
def get_place_from_gramps_id(self, gramps_id): def get_place_from_gramps_id(self, gramps_id):
if gramps_id in self.place_id_map: return Place.create(self.place_id_map[gramps_id])
return Place.create(self.place_id_map[gramps_id])
return None
def get_repository_from_gramps_id(self, gramps_id): def get_repository_from_gramps_id(self, gramps_id):
if gramps_id in self.repository_id_map: return Repository.create(self.repository_id_map[gramps_id])
return Repository.create(self.repository_id_map[gramps_id])
return None
def get_note_from_gramps_id(self, gramps_id): def get_note_from_gramps_id(self, gramps_id):
if gramps_id in self.note_id_map: return Note.create(self.note_id_map[gramps_id])
return Note.create(self.note_id_map[gramps_id])
return None
def get_place_cursor(self): def get_place_cursor(self):
return Cursor(self.place_map) return Cursor(self.place_map)
@@ -1258,15 +1208,15 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
def has_gramps_id(self, obj_key, gramps_id): def has_gramps_id(self, obj_key, gramps_id):
key2table = { key2table = {
PERSON_KEY: self.person_id_map, PERSON_KEY: self.person_id_map,
FAMILY_KEY: self.family_id_map, FAMILY_KEY: self.family_id_map,
SOURCE_KEY: self.source_id_map, SOURCE_KEY: self.source_id_map,
CITATION_KEY: self.citation_id_map, CITATION_KEY: self.citation_id_map,
EVENT_KEY: self.event_id_map, EVENT_KEY: self.event_id_map,
MEDIA_KEY: self.media_id_map, MEDIA_KEY: self.media_id_map,
PLACE_KEY: self.place_id_map, PLACE_KEY: self.place_id_map,
REPOSITORY_KEY: self.repository_id_map, REPOSITORY_KEY: self.repository_id_map,
NOTE_KEY: self.note_id_map, NOTE_KEY: self.note_id_map,
} }
return gramps_id in key2table[obj_key] return gramps_id in key2table[obj_key]
@@ -1301,54 +1251,34 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
return handle in self.media_map return handle in self.media_map
def get_raw_person_data(self, handle): def get_raw_person_data(self, handle):
if handle in self.person_map: return self.person_map[handle]
return self.person_map[handle]
return None
def get_raw_family_data(self, handle): def get_raw_family_data(self, handle):
if handle in self.family_map: return self.family_map[handle]
return self.family_map[handle]
return None
def get_raw_citation_data(self, handle): def get_raw_citation_data(self, handle):
if handle in self.citation_map: return self.citation_map[handle]
return self.citation_map[handle]
return None
def get_raw_source_data(self, handle): def get_raw_source_data(self, handle):
if handle in self.source_map: return self.source_map[handle]
return self.source_map[handle]
return None
def get_raw_repository_data(self, handle): def get_raw_repository_data(self, handle):
if handle in self.repository_map: return self.repository_map[handle]
return self.repository_map[handle]
return None
def get_raw_note_data(self, handle): def get_raw_note_data(self, handle):
if handle in self.note_map: return self.note_map[handle]
return self.note_map[handle]
return None
def get_raw_place_data(self, handle): def get_raw_place_data(self, handle):
if handle in self.place_map: return self.place_map[handle]
return self.place_map[handle]
return None
def get_raw_object_data(self, handle): def get_raw_object_data(self, handle):
if handle in self.media_map: return self.media_map[handle]
return self.media_map[handle]
return None
def get_raw_tag_data(self, handle): def get_raw_tag_data(self, handle):
if handle in self.tag_map: return self.tag_map[handle]
return self.tag_map[handle]
return None
def get_raw_event_data(self, handle): def get_raw_event_data(self, handle):
if handle in self.event_map: return self.event_map[handle]
return self.event_map[handle]
return None
def add_person(self, person, trans, set_gid=True): def add_person(self, person, trans, set_gid=True):
if not person.handle: if not person.handle:
@@ -1448,7 +1378,7 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
""" """
Add a MediaObject to the database, assigning internal IDs if they have Add 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. If not set_gid, then gramps_id is not set.
""" """
if not obj.handle: if not obj.handle:
@@ -1485,8 +1415,8 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
def remove_from_surname_list(self, person): def remove_from_surname_list(self, person):
""" """
Check whether there are persons with the same surname left in Check whether there are persons with the same surname left in
the database. the database.
If not then we need to remove the name from the list. If not then we need to remove the name from the list.
The function must be overridden in the derived class. The function must be overridden in the derived class.
""" """
@@ -1503,15 +1433,15 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
def get_gramps_ids(self, obj_key): def get_gramps_ids(self, obj_key):
key2table = { key2table = {
PERSON_KEY: self.person_id_map, PERSON_KEY: self.person_id_map,
FAMILY_KEY: self.family_id_map, FAMILY_KEY: self.family_id_map,
CITATION_KEY: self.citation_id_map, CITATION_KEY: self.citation_id_map,
SOURCE_KEY: self.source_id_map, SOURCE_KEY: self.source_id_map,
EVENT_KEY: self.event_id_map, EVENT_KEY: self.event_id_map,
MEDIA_KEY: self.media_id_map, MEDIA_KEY: self.media_id_map,
PLACE_KEY: self.place_id_map, PLACE_KEY: self.place_id_map,
REPOSITORY_KEY: self.repository_id_map, REPOSITORY_KEY: self.repository_id_map,
NOTE_KEY: self.note_id_map, NOTE_KEY: self.note_id_map,
} }
return list(key2table[obj_key].keys()) return list(key2table[obj_key].keys())
@@ -1583,73 +1513,73 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
def remove_source(self, handle, transaction): def remove_source(self, handle, transaction):
""" """
Remove the Source specified by the database handle from the Remove the Source specified by the database handle from the
database, preserving the change in the passed transaction. database, preserving the change in the passed transaction.
""" """
self._do_remove(handle, transaction, self.source_map, self._do_remove(handle, transaction, self.source_map,
self.source_id_map, SOURCE_KEY) self.source_id_map, SOURCE_KEY)
def remove_citation(self, handle, transaction): def remove_citation(self, handle, transaction):
""" """
Remove the Citation specified by the database handle from the Remove the Citation specified by the database handle from the
database, preserving the change in the passed transaction. database, preserving the change in the passed transaction.
""" """
self._do_remove(handle, transaction, self.citation_map, self._do_remove(handle, transaction, self.citation_map,
self.citation_id_map, CITATION_KEY) self.citation_id_map, CITATION_KEY)
def remove_event(self, handle, transaction): def remove_event(self, handle, transaction):
""" """
Remove the Event specified by the database handle from the Remove the Event specified by the database handle from the
database, preserving the change in the passed transaction. database, preserving the change in the passed transaction.
""" """
self._do_remove(handle, transaction, self.event_map, self._do_remove(handle, transaction, self.event_map,
self.event_id_map, EVENT_KEY) self.event_id_map, EVENT_KEY)
def remove_object(self, handle, transaction): def remove_object(self, handle, transaction):
""" """
Remove the MediaObjectPerson specified by the database handle from the Remove the MediaObjectPerson specified by the database handle from the
database, preserving the change in the passed transaction. database, preserving the change in the passed transaction.
""" """
self._do_remove(handle, transaction, self.media_map, self._do_remove(handle, transaction, self.media_map,
self.media_id_map, MEDIA_KEY) self.media_id_map, MEDIA_KEY)
def remove_place(self, handle, transaction): def remove_place(self, handle, transaction):
""" """
Remove the Place specified by the database handle from the Remove the Place specified by the database handle from the
database, preserving the change in the passed transaction. database, preserving the change in the passed transaction.
""" """
self._do_remove(handle, transaction, self.place_map, self._do_remove(handle, transaction, self.place_map,
self.place_id_map, PLACE_KEY) self.place_id_map, PLACE_KEY)
def remove_family(self, handle, transaction): def remove_family(self, handle, transaction):
""" """
Remove the Family specified by the database handle from the Remove the Family specified by the database handle from the
database, preserving the change in the passed transaction. database, preserving the change in the passed transaction.
""" """
self._do_remove(handle, transaction, self.family_map, self._do_remove(handle, transaction, self.family_map,
self.family_id_map, FAMILY_KEY) self.family_id_map, FAMILY_KEY)
def remove_repository(self, handle, transaction): def remove_repository(self, handle, transaction):
""" """
Remove the Repository specified by the database handle from the Remove the Repository specified by the database handle from the
database, preserving the change in the passed transaction. database, preserving the change in the passed transaction.
""" """
self._do_remove(handle, transaction, self.repository_map, self._do_remove(handle, transaction, self.repository_map,
self.repository_id_map, REPOSITORY_KEY) self.repository_id_map, REPOSITORY_KEY)
def remove_note(self, handle, transaction): def remove_note(self, handle, transaction):
""" """
Remove the Note specified by the database handle from the Remove the Note specified by the database handle from the
database, preserving the change in the passed transaction. database, preserving the change in the passed transaction.
""" """
self._do_remove(handle, transaction, self.note_map, self._do_remove(handle, transaction, self.note_map,
self.note_id_map, NOTE_KEY) self.note_id_map, NOTE_KEY)
def remove_tag(self, handle, transaction): def remove_tag(self, handle, transaction):
""" """
Remove the Tag specified by the database handle from the Remove the Tag specified by the database handle from the
database, preserving the change in the passed transaction. database, preserving the change in the passed transaction.
""" """
self._do_remove(handle, transaction, self.tag_map, self._do_remove(handle, transaction, self.tag_map,
None, TAG_KEY) None, TAG_KEY)
def is_empty(self): def is_empty(self):
@@ -1681,7 +1611,7 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
self.set_metadata('media_bookmarks', self.media_bookmarks.get()) self.set_metadata('media_bookmarks', self.media_bookmarks.get())
self.set_metadata('place_bookmarks', self.place_bookmarks.get()) self.set_metadata('place_bookmarks', self.place_bookmarks.get())
self.set_metadata('note_bookmarks', self.note_bookmarks.get()) self.set_metadata('note_bookmarks', self.note_bookmarks.get())
# Custom type values, sets # Custom type values, sets
self.set_metadata('event_names', self.event_names) self.set_metadata('event_names', self.event_names)
self.set_metadata('fattr_names', self.family_attributes) self.set_metadata('fattr_names', self.family_attributes)
@@ -1700,7 +1630,7 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
self.set_metadata('mattr_names', self.media_attributes) self.set_metadata('mattr_names', self.media_attributes)
self.set_metadata('eattr_names', self.event_attributes) self.set_metadata('eattr_names', self.event_attributes)
self.set_metadata('place_types', self.place_types) self.set_metadata('place_types', self.place_types)
# Save misc items: # Save misc items:
self.save_surname_list() self.save_surname_list()
self.save_gender_stats(self.genderStats) self.save_gender_stats(self.genderStats)
@@ -1715,7 +1645,7 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
self.set_metadata('omap_index', self.omap_index) self.set_metadata('omap_index', self.omap_index)
self.set_metadata('rmap_index', self.rmap_index) self.set_metadata('rmap_index', self.rmap_index)
self.set_metadata('nmap_index', self.nmap_index) self.set_metadata('nmap_index', self.nmap_index)
self.close_backend() self.close_backend()
def get_bookmarks(self): def get_bookmarks(self):
@@ -1754,14 +1684,14 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
def get_person_attribute_types(self): def get_person_attribute_types(self):
""" """
Return a list of all Attribute types assocated with Person instances Return a list of all Attribute types assocated with Person instances
in the database. in the database.
""" """
return list(self.individual_attributes) return list(self.individual_attributes)
def get_family_attribute_types(self): def get_family_attribute_types(self):
""" """
Return a list of all Attribute types assocated with Family instances Return a list of all Attribute types assocated with Family instances
in the database. in the database.
""" """
return list(self.family_attributes) return list(self.family_attributes)
@@ -1774,7 +1704,7 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
def get_media_attribute_types(self): def get_media_attribute_types(self):
""" """
Return a list of all Attribute types assocated with Media and MediaRef Return a list of all Attribute types assocated with Media and MediaRef
instances in the database. instances in the database.
""" """
return list(self.media_attributes) return list(self.media_attributes)
@@ -1816,14 +1746,14 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
def get_repository_types(self): def get_repository_types(self):
""" """
Return a list of all custom repository types assocated with Repository Return a list of all custom repository types assocated with Repository
instances in the database. instances in the database.
""" """
return list(self.repository_types) return list(self.repository_types)
def get_note_types(self): def get_note_types(self):
""" """
Return a list of all custom note types assocated with Note instances Return a list of all custom note types assocated with Note instances
in the database. in the database.
""" """
return list(self.note_types) return list(self.note_types)
@@ -1837,14 +1767,14 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
def get_source_media_types(self): def get_source_media_types(self):
""" """
Return a list of all custom source media types assocated with Source Return a list of all custom source media types assocated with Source
instances in the database. instances in the database.
""" """
return list(self.source_media_types) return list(self.source_media_types)
def get_url_types(self): def get_url_types(self):
""" """
Return a list of all custom names types assocated with Url instances Return a list of all custom names types assocated with Url instances
in the database. in the database.
""" """
return list(self.url_types) return list(self.url_types)
@@ -1908,7 +1838,7 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
return (Tag.create(data[1]) for data in self.get_tag_cursor()) return (Tag.create(data[1]) for data in self.get_tag_cursor())
def set_prefixes(self, person, media, family, source, citation, def set_prefixes(self, person, media, family, source, citation,
place, event, repository, note): place, event, repository, note):
self.set_person_id_prefix(person) self.set_person_id_prefix(person)
self.set_object_id_prefix(media) self.set_object_id_prefix(media)
@@ -1986,8 +1916,8 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
returns a byte string returns a byte string
""" """
if person.primary_name and person.primary_name.surname_list: if person.primary_name and person.primary_name.surname_list:
order_by = " ".join([x.surname for x in person.primary_name.surname_list if not order_by = " ".join([x.surname for x in person.primary_name.surname_list if not
(int(x.origintype) in [NameOriginType.PATRONYMIC, (int(x.origintype) in [NameOriginType.PATRONYMIC,
NameOriginType.MATRONYMIC]) ]) NameOriginType.MATRONYMIC]) ])
else: else:
order_by = "" order_by = ""
@@ -2013,7 +1943,7 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
If you wish to support an optional backup routine, put it here. If you wish to support an optional backup routine, put it here.
""" """
from gramps.plugins.export.exportxml import XmlWriter from gramps.plugins.export.exportxml import XmlWriter
from gramps.cli.user import User from gramps.cli.user import User
writer = XmlWriter(self, User(), strip_photos=0, compress=1) writer = XmlWriter(self, User(), strip_photos=0, compress=1)
filename = os.path.join(self._directory, "data.gramps") filename = os.path.join(self._directory, "data.gramps")
writer.write(filename) writer.write(filename)
@@ -2056,4 +1986,3 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
def set_default_person_handle(self, handle): def set_default_person_handle(self, handle):
self.set_metadata("default-person-handle", handle) self.set_metadata("default-person-handle", handle)
self.emit('home-person-changed') self.emit('home-person-changed')