import json import sys from load import LOADERS import analyzer class LogSettings: log_format = None type_field = None spatials = None actions = None analyzers = [] boards = None sequences = None def __init__(self, json_dict): self.log_format = json_dict['logFormat'] self.type_field = json_dict['entryType'] self.spatials = json_dict['spatials'] self.actions = json_dict['actions'] self.boards = json_dict['boards'] for mod in json_dict['analyzers']: for name in json_dict['analyzers'][mod]: self.analyzers.append(getattr(sys.modules[mod], name)) self.sequences = json_dict['sequences'] def __repr__(self): return str({ "logFormat": self.log_format, "entryType": self.type_field, "spatials": self.spatials, "actions": self.actions, "analyzers": self.analyzers, "boards": self.boards, "sequences": self.sequences, }) def load_settings(file: str) -> LogSettings: return LogSettings(json.load(open(file))) if __name__ == '__main__': settings = load_settings("biogames2.json") print(settings) logfile = "data/inst_56d9b64144ab44e7b90bf766f3be32e3/instance_log.sqlite" loader = LOADERS[settings.log_format]() try: loader.load(logfile) except BaseException as e: raise RuntimeError(e) analyzers = [] for analyzer in settings.analyzers: analyzers.append(analyzer(settings)) for entry in loader.get_entry(): for analyzer in analyzers: if analyzer.process(entry): break for analyzer in analyzers: print("* Result for " + analyzer.name()) print(analyzer.result()) #for analyzer in analyzers: # if analyzer.name() in ["LogEntryCount", "ActionSequenceAnalyzer"]: # print(json.dumps(analyzer.result(), indent=2)) #for analyzer in analyzers: # if analyzer.name() in ["BoardDuration"]: # print(json.dumps(analyzer.result(), indent=2)) # print(analyzer.render()) # coords = analyzers[1].render() # with open("test.js", "w") as out: # out.write("coords = "+coords)