DB-API: allow low-level map import

This commit is contained in:
Doug Blank 2015-05-30 07:54:59 -04:00
parent a213f92f0d
commit 5b2bc78108

View File

@ -131,8 +131,13 @@ class Table(object):
"""
Implements Table interface.
"""
def __init__(self, funcs):
self.funcs = funcs
def __init__(self, db, table_name, funcs=None):
self.db = db
self.table_name = table_name
if funcs:
self.funcs = funcs
else:
self.funcs = db._tables[table_name]
def cursor(self):
"""
@ -157,6 +162,7 @@ class Map(object):
self.table = table
self.keys_func = keys_func
self.contains_func = contains_func
self.txn = DBAPITxn("Dummy transaction", db=self.table.db, batch=True)
def keys(self):
return self.table.funcs[self.keys_func]()
@ -171,6 +177,16 @@ class Map(object):
if self.table.funcs[self.contains_func](key):
return self.table.funcs["raw_func"](key)
def __setitem__(self, key, value):
"""
This is only done in a low-level raw import.
value: serialized object
key: bytes key (ignored in this implementation)
"""
obj = self.table.funcs["class_func"].create(value)
self.table.funcs["commit_func"](obj, self.txn)
def __len__(self):
return self.table.funcs["count_func"]()
@ -515,44 +531,44 @@ class DBAPI(DbWriteBase, DbReadBase, UpdateCallback, Callback):
self.rmap_index = 0
self.nmap_index = 0
self.env = Environment(self)
self.person_map = Map(Table(self._tables["Person"]))
self.person_id_map = Map(Table(self._tables["Person"]),
self.person_map = Map(Table(self, "Person"))
self.person_id_map = Map(Table(self, "Person"),
keys_func="ids_func",
contains_func="has_gramps_id_func")
self.family_map = Map(Table(self._tables["Family"]))
self.family_id_map = Map(Table(self._tables["Family"]),
self.family_map = Map(Table(self, "Family"))
self.family_id_map = Map(Table(self, "Family"),
keys_func="ids_func",
contains_func="has_gramps_id_func")
self.place_map = Map(Table(self._tables["Place"]))
self.place_id_map = Map(Table(self._tables["Place"]),
self.place_map = Map(Table(self, "Place"))
self.place_id_map = Map(Table(self, "Place"),
keys_func="ids_func",
contains_func="has_gramps_id_func")
self.citation_map = Map(Table(self._tables["Citation"]))
self.citation_id_map = Map(Table(self._tables["Citation"]),
self.citation_map = Map(Table(self, "Citation"))
self.citation_id_map = Map(Table(self, "Citation"),
keys_func="ids_func",
contains_func="has_gramps_id_func")
self.source_map = Map(Table(self._tables["Source"]))
self.source_id_map = Map(Table(self._tables["Source"]),
self.source_map = Map(Table(self, "Source"))
self.source_id_map = Map(Table(self, "Source"),
keys_func="ids_func",
contains_func="has_gramps_id_func")
self.repository_map = Map(Table(self._tables["Repository"]))
self.repository_id_map = Map(Table(self._tables["Repository"]),
self.repository_map = Map(Table(self, "Repository"))
self.repository_id_map = Map(Table(self, "Repository"),
keys_func="ids_func",
contains_func="has_gramps_id_func")
self.note_map = Map(Table(self._tables["Note"]))
self.note_id_map = Map(Table(self._tables["Note"]),
self.note_map = Map(Table(self, "Note"))
self.note_id_map = Map(Table(self, "Note"),
keys_func="ids_func",
contains_func="has_gramps_id_func")
self.media_map = Map(Table(self._tables["Media"]))
self.media_id_map = Map(Table(self._tables["Media"]),
self.media_map = Map(Table(self, "Media"))
self.media_id_map = Map(Table(self, "Media"),
keys_func="ids_func",
contains_func="has_gramps_id_func")
self.event_map = Map(Table(self._tables["Event"]))
self.event_id_map = Map(Table(self._tables["Event"]),
self.event_map = Map(Table(self, "Event"))
self.event_id_map = Map(Table(self, "Event"),
keys_func="ids_func",
contains_func="has_gramps_id_func")
self.tag_map = Map(Table(self._tables["Tag"]))
self.metadata = Map(Table({"cursor_func": lambda: MetaCursor()}))
self.tag_map = Map(Table(self, "Tag"))
self.metadata = Map(Table(self, "Metadata", funcs={"cursor_func": lambda: MetaCursor()}))
self.undo_callback = None
self.redo_callback = None
self.undo_history_callback = None