From b0517d0ee42030c271974caae10190200bc40d52 Mon Sep 17 00:00:00 2001 From: Doug Blank Date: Sun, 10 Nov 2013 15:07:14 -0500 Subject: [PATCH] Added db.get_transaction_class to connect db and txn; refactored _tables metadata --- gramps/gen/db/base.py | 12 ++++ gramps/gen/db/dictionary.py | 89 +++++++++++++++++++----------- gramps/gen/db/read.py | 62 ++++++++++----------- gramps/gen/db/write.py | 106 ++++++++++++++++++++++++++++++++++++ 4 files changed, 204 insertions(+), 65 deletions(-) diff --git a/gramps/gen/db/base.py b/gramps/gen/db/base.py index a134fe49f..88a891019 100644 --- a/gramps/gen/db/base.py +++ b/gramps/gen/db/base.py @@ -61,6 +61,18 @@ class DbReadBase(object): """ self.basedb = self self.__feature = {} # {"feature": VALUE, ...} + self._tables = { + "Citation": {}, + "Event": {}, + "Family": {}, + "Media": {}, + "Note": {}, + "Person": {}, + "Place": {}, + "Repository": {}, + "Source": {}, + "Tag": {}, + } def get_feature(self, feature): """ diff --git a/gramps/gen/db/dictionary.py b/gramps/gen/db/dictionary.py index 81ebb3637..76b2015c3 100644 --- a/gramps/gen/db/dictionary.py +++ b/gramps/gen/db/dictionary.py @@ -107,92 +107,109 @@ class DictionaryDb(DbWriteBase, DbReadBase): """ A Gramps Database Backend. This replicates the grampsdb functions. """ - def __init__(self, *args, **kwargs): DbReadBase.__init__(self) DbWriteBase.__init__(self) - self._tables = { - 'Person': - { + self._tables['Person'].update( + { "handle_func": self.get_person_from_handle, "gramps_id_func": self.get_person_from_gramps_id, "class_func": Person, "cursor_func": self.get_person_cursor, "handles_func": self.get_person_handles, - }, - 'Family': - { + "add_func": self.add_person, + "commit_func": self.commit_person, + }) + self._tables['Family'].update( + { "handle_func": self.get_family_from_handle, "gramps_id_func": self.get_family_from_gramps_id, "class_func": Family, "cursor_func": self.get_family_cursor, "handles_func": self.get_family_handles, - }, - 'Source': - { + "add_func": self.add_family, + "commit_func": self.commit_family, + }) + self._tables['Source'].update( + { "handle_func": self.get_source_from_handle, "gramps_id_func": self.get_source_from_gramps_id, "class_func": Source, "cursor_func": self.get_source_cursor, "handles_func": self.get_source_handles, - }, - 'Citation': - { + "add_func": self.add_source, + "commit_func": self.commit_source, + }) + self._tables['Citation'].update( + { "handle_func": self.get_citation_from_handle, "gramps_id_func": self.get_citation_from_gramps_id, "class_func": Citation, "cursor_func": self.get_citation_cursor, "handles_func": self.get_citation_handles, - }, - 'Event': - { + "add_func": self.add_citation, + "commit_func": self.commit_citation, + }) + self._tables['Event'].update( + { "handle_func": self.get_event_from_handle, "gramps_id_func": self.get_event_from_gramps_id, "class_func": Event, "cursor_func": self.get_event_cursor, "handles_func": self.get_event_handles, - }, - 'Media': - { + "add_func": self.add_event, + "commit_func": self.commit_event, + }) + self._tables['Media'].update( + { "handle_func": self.get_object_from_handle, "gramps_id_func": self.get_object_from_gramps_id, "class_func": MediaObject, "cursor_func": self.get_media_cursor, "handles_func": self.get_media_object_handles, - }, - 'Place': - { + "add_func": self.add_object, + "commit_func": self.commit_media_object, + }) + self._tables['Place'].update( + { "handle_func": self.get_place_from_handle, "gramps_id_func": self.get_place_from_gramps_id, "class_func": Place, "cursor_func": self.get_place_cursor, "handles_func": self.get_place_handles, - }, - 'Repository': - { + "add_func": self.add_place, + "commit_func": self.commit_place, + }) + self._tables['Repository'].update( + { "handle_func": self.get_repository_from_handle, "gramps_id_func": self.get_repository_from_gramps_id, "class_func": Repository, "cursor_func": self.get_repository_cursor, "handles_func": self.get_repository_handles, - }, - 'Note': - { + "add_func": self.add_repository, + "commit_func": self.commit_repository, + }) + self._tables['Note'].update( + { "handle_func": self.get_note_from_handle, "gramps_id_func": self.get_note_from_gramps_id, "class_func": Note, "cursor_func": self.get_note_cursor, "handles_func": self.get_note_handles, - }, - 'Tag': - { + "add_func": self.add_note, + "commit_func": self.commit_note, + }) + self._tables['Tag'].update( + { "handle_func": self.get_tag_from_handle, "gramps_id_func": None, "class_func": Tag, "cursor_func": self.get_tag_cursor, "handles_func": self.get_tag_handles, - }, - } + "add_func": self.add_tag, + "commit_func": self.commit_tag, + }) # skip GEDCOM cross-ref check for now: self.set_feature("skip-check-xref", True) self.set_feature("skip-import-additions", True) @@ -968,3 +985,9 @@ class DictionaryDb(DbWriteBase, DbReadBase): for (handle, data) in cursor(): map = getattr(self, "%s_map" % key.lower()) map[handle] = class_.create(data) + + def get_transaction_class(self): + """ + Get the transaction class associated with this database backend. + """ + return DictionaryTxn diff --git a/gramps/gen/db/read.py b/gramps/gen/db/read.py index d2251aab9..6fd1d8dfb 100644 --- a/gramps/gen/db/read.py +++ b/gramps/gen/db/read.py @@ -293,88 +293,86 @@ class DbBsddbRead(DbReadBase, Callback): """ DbReadBase.__init__(self) Callback.__init__(self) - self._tables = { - 'Person': - { + self._tables['Person'].update( + { "handle_func": self.get_person_from_handle, "gramps_id_func": self.get_person_from_gramps_id, "class_func": Person, "cursor_func": self.get_person_cursor, "handles_func": self.get_person_handles, - }, - 'Family': - { + }) + self._tables['Family'].update( + { "handle_func": self.get_family_from_handle, "gramps_id_func": self.get_family_from_gramps_id, "class_func": Family, "cursor_func": self.get_family_cursor, "handles_func": self.get_family_handles, - }, - 'Source': - { + }) + self._tables['Source'].update( + { "handle_func": self.get_source_from_handle, "gramps_id_func": self.get_source_from_gramps_id, "class_func": Source, "cursor_func": self.get_source_cursor, "handles_func": self.get_source_handles, - }, - 'Citation': - { + }) + self._tables['Citation'].update( + { "handle_func": self.get_citation_from_handle, "gramps_id_func": self.get_citation_from_gramps_id, "class_func": Citation, "cursor_func": self.get_citation_cursor, "handles_func": self.get_citation_handles, - }, - 'Event': - { + }) + self._tables['Event'].update( + { "handle_func": self.get_event_from_handle, "gramps_id_func": self.get_event_from_gramps_id, "class_func": Event, "cursor_func": self.get_event_cursor, "handles_func": self.get_event_handles, - }, - 'Media': - { + }) + self._tables['Media'].update( + { "handle_func": self.get_object_from_handle, "gramps_id_func": self.get_object_from_gramps_id, "class_func": MediaObject, "cursor_func": self.get_media_cursor, "handles_func": self.get_media_object_handles, - }, - 'Place': - { + }) + self._tables['Place'].update( + { "handle_func": self.get_place_from_handle, "gramps_id_func": self.get_place_from_gramps_id, "class_func": Place, "cursor_func": self.get_place_cursor, "handles_func": self.get_place_handles, - }, - 'Repository': - { + }) + self._tables['Repository'].update( + { "handle_func": self.get_repository_from_handle, "gramps_id_func": self.get_repository_from_gramps_id, "class_func": Repository, "cursor_func": self.get_repository_cursor, "handles_func": self.get_repository_handles, - }, - 'Note': - { + }) + self._tables['Note'].update( + { "handle_func": self.get_note_from_handle, "gramps_id_func": self.get_note_from_gramps_id, "class_func": Note, "cursor_func": self.get_note_cursor, "handles_func": self.get_note_handles, - }, - 'Tag': - { + }) + self._tables['Tag'].update( + { "handle_func": self.get_tag_from_handle, "gramps_id_func": None, "class_func": Tag, "cursor_func": self.get_tag_cursor, "handles_func": self.get_tag_handles, - }, - } + }) self.set_person_id_prefix('I%04d') self.set_object_id_prefix('O%04d') diff --git a/gramps/gen/db/write.py b/gramps/gen/db/write.py index 0669c3571..870e96f85 100644 --- a/gramps/gen/db/write.py +++ b/gramps/gen/db/write.py @@ -285,6 +285,107 @@ class DbBsddb(DbBsddbRead, DbWriteBase, UpdateCallback): DbBsddbRead.__init__(self) DbWriteBase.__init__(self) #UpdateCallback.__init__(self) + self._tables['Person'].update( + { + "handle_func": self.get_person_from_handle, + "gramps_id_func": self.get_person_from_gramps_id, + "class_func": Person, + "cursor_func": self.get_person_cursor, + "handles_func": self.get_person_handles, + "add_func": self.add_person, + "commit_func": self.commit_person, + }) + self._tables['Family'].update( + { + "handle_func": self.get_family_from_handle, + "gramps_id_func": self.get_family_from_gramps_id, + "class_func": Family, + "cursor_func": self.get_family_cursor, + "handles_func": self.get_family_handles, + "add_func": self.add_family, + "commit_func": self.commit_family, + }) + self._tables['Source'].update( + { + "handle_func": self.get_source_from_handle, + "gramps_id_func": self.get_source_from_gramps_id, + "class_func": Source, + "cursor_func": self.get_source_cursor, + "handles_func": self.get_source_handles, + "add_func": self.add_source, + "commit_func": self.commit_source, + }) + self._tables['Citation'].update( + { + "handle_func": self.get_citation_from_handle, + "gramps_id_func": self.get_citation_from_gramps_id, + "class_func": Citation, + "cursor_func": self.get_citation_cursor, + "handles_func": self.get_citation_handles, + "add_func": self.add_citation, + "commit_func": self.commit_citation, + }) + self._tables['Event'].update( + { + "handle_func": self.get_event_from_handle, + "gramps_id_func": self.get_event_from_gramps_id, + "class_func": Event, + "cursor_func": self.get_event_cursor, + "handles_func": self.get_event_handles, + "add_func": self.add_event, + "commit_func": self.commit_event, + }) + self._tables['Media'].update( + { + "handle_func": self.get_object_from_handle, + "gramps_id_func": self.get_object_from_gramps_id, + "class_func": MediaObject, + "cursor_func": self.get_media_cursor, + "handles_func": self.get_media_object_handles, + "add_func": self.add_object, + "commit_func": self.commit_media_object, + }) + self._tables['Place'].update( + { + "handle_func": self.get_place_from_handle, + "gramps_id_func": self.get_place_from_gramps_id, + "class_func": Place, + "cursor_func": self.get_place_cursor, + "handles_func": self.get_place_handles, + "add_func": self.add_place, + "commit_func": self.commit_place, + }) + self._tables['Repository'].update( + { + "handle_func": self.get_repository_from_handle, + "gramps_id_func": self.get_repository_from_gramps_id, + "class_func": Repository, + "cursor_func": self.get_repository_cursor, + "handles_func": self.get_repository_handles, + "add_func": self.add_repository, + "commit_func": self.commit_repository, + }) + self._tables['Note'].update( + { + "handle_func": self.get_note_from_handle, + "gramps_id_func": self.get_note_from_gramps_id, + "class_func": Note, + "cursor_func": self.get_note_cursor, + "handles_func": self.get_note_handles, + "add_func": self.add_note, + "commit_func": self.commit_note, + }) + self._tables['Tag'].update( + { + "handle_func": self.get_tag_from_handle, + "gramps_id_func": None, + "class_func": Tag, + "cursor_func": self.get_tag_cursor, + "handles_func": self.get_tag_handles, + "add_func": self.add_tag, + "commit_func": self.commit_tag, + }) + self.secondary_connected = False self.has_changed = False self.brief_name = None @@ -2312,6 +2413,11 @@ class DbBsddb(DbBsddbRead, DbWriteBase, UpdateCallback): """ return self.brief_name + def get_transaction_class(self): + """ + Get the transaction class associated with this database backend. + """ + return DbTxn def _mkname(path, name): return os.path.join(path, name + DBEXT)