simu_flags
agp8x 2017-07-25 17:35:10 +02:00
commit b5f522ad8b
7 changed files with 146 additions and 0 deletions

2
analyzer/__init__.py Normal file
View File

@ -0,0 +1,2 @@
from .analyzer import *
from .biogames import *

24
analyzer/analyzer.py Normal file
View File

@ -0,0 +1,24 @@
from log_analyzer import LogSettings
class Analyzer:
def __init__(self, settings: LogSettings):
self.settings = settings
def process(self, entry: object) -> bool:
raise NotImplementedError()
def result(self) -> object:
raise NotImplementedError()
class LocationAnalyzer(Analyzer):
def __init__(self, settings: LogSettings):
super().__init__(settings)
def result(self) -> object:
return self.settings.spatials
def process(self, entry: object) -> bool:
pass

18
analyzer/biogames.py Normal file
View File

@ -0,0 +1,18 @@
from collections import defaultdict
from log_analyzer import LogSettings
from .analyzer import Analyzer
class BoardDurationAnalyzer(Analyzer):
def result(self) -> object:
return self.store
def process(self, entry: object) -> bool:
self.store[entry] += 1
return False
def __init__(self, settings: LogSettings):
super().__init__(settings)
self.store = defaultdict(lambda: 0)

14
biogames.json Normal file
View File

@ -0,0 +1,14 @@
{
"logFormat": "json",
"entryType": "@class",
"spatials":["...PositionLogEvent"],
"actions":["...QuestionAnswerEvent", "...SimuAnswerEvent"],
"analyzers": {
"analyzer": [
"LocationAnalyzer"
],
"analyzer.biogames": [
"BoardDurationAnalyzer"
]
}
}

33
load.py Normal file
View File

@ -0,0 +1,33 @@
import json
class Loader:
def load(self, file: str):
raise NotImplementedError()
def get_entry(self) -> object:
raise NotImplementedError()
class JSONLoader(Loader):
data = None
def load(self, file: str):
self.data = json.load(open(file))
def get_entry(self):
for entry in self.data:
yield entry
class SQLiteLoader(Loader):
def load(self, file: str):
pass
def get_entry(self) -> object:
pass
LOADERS = {
"json": JSONLoader,
"sqlite": SQLiteLoader
}

54
log_analyzer.py Normal file
View File

@ -0,0 +1,54 @@
import json
import sys
from load import LOADERS
import analyzer
class LogSettings:
log_format = None
entry_type = None
spatials = None
actions = None
analyzers = []
def __init__(self, json_dict):
self.log_format = json_dict['logFormat']
self.entry_type = json_dict['entryType']
self.spatials = json_dict['spatials']
self.actions = json_dict['actions']
for mod in json_dict['analyzers']:
for name in json_dict['analyzers'][mod]:
self.analyzers.append(getattr(sys.modules[mod], name))
def __repr__(self):
return str({
"logFormat": self.log_format,
"entryType": self.entry_type,
"spatials": self.spatials,
"actions": self.actions,
"analyzers": self.analyzers
})
def load_settings(file:str) -> LogSettings:
return LogSettings(json.load(open(file)))
if __name__ == '__main__':
settings = load_settings("biogames.json")
print(settings)
logfile = "sample.json"
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:
analyzer.process(entry)
for analyzer in analyzers:
print("* Result for " + str(type(analyzer)))
print(analyzer.result())

1
sample.json Normal file
View File

@ -0,0 +1 @@
[]