"""A class that replaces item IDs with BetterBibtex IDs"""__author__='Paul Landes'fromtypingimportDict,AnyimportloggingfrompathlibimportPathimportsqlite3fromzensols.persistimportpersistedfromzensols.zotsiteimportZoteroObject,Item,Visitor,Librarylogger=logging.getLogger(__name__)
[docs]classBetterBibtexMapper(object):"""Read the BetterBibtex database and create a mapping from item DB ids to citation keys. """
@property@persisted('_mapping')defmapping(self)->Dict[str,Any]:path:Path=self.lib.data_dir/'better-bibtex.sqlite'iflogger.isEnabledFor(logging.INFO):logger.info(f'reading bibtex DB at {path}')conn=sqlite3.connect(':memory:')conn.execute('ATTACH DATABASE ? AS betterbibtex',(str(path),))try:returndict(conn.execute("""\select itemID, citationKey from betterbibtex.`citationkey` where libraryID = ?""",[self.lib.library_id]))finally:conn.close()
[docs]classBetterBibtexVisitor(Visitor):"""Use the ``BetterBibtexMapper`` to change the keys in mapped items to the respective citation keys. """