From 0eeb77862ea6748e234f29145ed137e580d035fb Mon Sep 17 00:00:00 2001 From: JohnE Date: Tue, 16 Jun 2015 09:22:58 -0700 Subject: [PATCH] WIP: import JSON file --- libs/fingerprint.py | 29 +++++++++++++++++++---------- main.py | 28 +++++++++++++++------------- 2 files changed, 34 insertions(+), 23 deletions(-) diff --git a/libs/fingerprint.py b/libs/fingerprint.py index a2b6f47..04f64e5 100644 --- a/libs/fingerprint.py +++ b/libs/fingerprint.py @@ -23,6 +23,7 @@ class DBSchema: self.cur = None self.tableNames = [] self.tables = {} + self.jsonData = None return @@ -45,8 +46,12 @@ class DBSchema: def importDBSchema(self, filein): - return - + try: + fh = open(fileout, "r") + self.jsonData = json.loads(fh) + except Exception, e: + print e + def __openDB(self, filein): conn = sqlite3.connect(filein) @@ -73,19 +78,23 @@ class DBSchema: def writeFingerprint(self, filehandle): + ahash = {} thash = {} + mhash = {} + ahash['tables'] = thash + ahash['metadata'] = mhash + + # metadata + mhash['app-name'] = 'dbfp' + mhash['app-ver'] = '0.50' + mhash['format-ver'] = '0.90' + + # tables keys = self.tables.keys() for key in keys: thash[key] = self.tables[key].fields - json.dump(thash, filehandle, sort_keys=True, indent=4) - - - def writeFingerprint2(self, filehandle): - keys = self.tables.keys() - for key in keys: - tableDef = self.tables[key] - tableDef.toFile(filehandle); + json.dump(ahash, filehandle, sort_keys=True, indent=4) def getErrorString(self, errorCode): diff --git a/main.py b/main.py index 5240d2d..b314896 100644 --- a/main.py +++ b/main.py @@ -8,33 +8,35 @@ from libs import fingerprint def main(): - (filein, fileout, verbose) = parseArgs() - #retVal = fingerprint.scanDB(filein) + (filein, fileout, filejson, verbose) = parseArgs() db = fingerprint.DBSchema() - retVal = db.scanDBFile(filein) - - if (retVal > 0): - fh = open(fileout, "w") + if (fileout): + retVal = db.scanDBFile(filein) + if (retVal > 0): + fh = open(fileout, "w") + db.debugFingerprint() + db.writeFingerprint(fh) + fh.close() + else: + print db.getErrorString(retVal) + elif (filejson): + db.importDBSchema(filejson) db.debugFingerprint() - db.writeFingerprint(fh) - fh.close() - else: - print db.getErrorString(retVal) def parseArgs(): verbose = False timestr = time.strftime('%Y-%m-%d_%H%M%S', time.localtime(time.time())) - #outfile = "telegram-data_" + timestr parser = argparse.ArgumentParser(description='Fingerprint a sqlite database based on its schema') - parser.add_argument('-f', '--file', required=True) + parser.add_argument('-f', '--file', required=False) + parser.add_argument('-j', '--json', required=False) parser.add_argument('-v', '--verbose', action='store_true') args = parser.parse_args() if (args.verbose): verbose = args.verbose fileout = args.file + "_" + timestr + '.json' - return (args.file, fileout, verbose) + return (args.file, fileout, args.json, verbose) if __name__ == "__main__":