# # # [ md5_all, md5_list, file_name ] # # import os import sys import logging import sqlite3 as sql from libs.fingerprint import FingerprintDB # prefixed with "_" so that it will be listed first and visible INDEX_FILENAME = '_index_dpfp.db' class FingerprintIndex: """ Class handling an index of fingerprints for effeciently locating a fingerprint """ # def __init__(self): self.db_conn = None return def openIndex(self, fpdir): fq_fpidx = fpdir + os.path.sep + INDEX_FILENAME try: if (os.path.isfile(fq_fpidx)): self.db_conn = sql.connect(fq_fpidx) except: self.db_conn = None logging.info("No index file found, creating index now...") # create the Index file, also populate it with entrieds from the fingerprint self.creatIndex(fpdir) # def createIndex(self, fpdir): fq_fpidx = fpdir + os.path.sep + INDEX_FILENAME try: self.db_conn = sql.connect(fq_fpidx) self.db_conn.execute(''' CREATE TABLE md5_index ( md5_all TEXT PRIMARY KEY, md5_list TEXT, file_name TEXT); ''') logging.info("Successfully created index table") except: logging.error("Error creating index table") finally: if self.db_conn: self.db_conn.close() self.db_conn = None raise FingerprintIndexWrite("Error creating an index file") self.__populateIndex(fpdir) def __populateIndex(self, fpdir): # # read each file, pull md5, add row to database failCount = 0 finCount = 0 try: db = FingerprintDB() files = os.listdir(fpdir) for file in Files: try: db.scanDBFile(fpdir) finCount = finCount+1 except: failCount = failCount+1 except: logging.info("Completed populating the index. Completed: {} Failed: {} ".format(str(finCount), str(failCount))) pass # def __checkIntegrity(self): """ Sanity check the number of files against the index rows """ pass # def dirCompare(self, folder): pass def compareFingerprint(self, fp1, fp2): pass