From b0033953c1f7677a30471692d93d2e669b0aeecc Mon Sep 17 00:00:00 2001 From: Timotej Lazar Date: Thu, 25 Feb 2016 16:06:51 +0100 Subject: Update monkey.action parser --- monkey/action.py | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) (limited to 'monkey') diff --git a/monkey/action.py b/monkey/action.py index 2ea311c..43747b0 100644 --- a/monkey/action.py +++ b/monkey/action.py @@ -16,6 +16,8 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . +import sys + class Action: def __init__(self, abstime, data): self.type = data['typ'] @@ -35,13 +37,28 @@ class Action: self.text = data['txt'] self.length = len(self.text) elif self.type == 'test': - self.feedback = data['feedback'] + # data['feedback'] is a 'test_results' hint object, or a list + # containing such hint + hint = None + if isinstance(data['feedback'], list): + for hint in data['feedback']: + if hint['id'] == 'test_results': + break + else: + hint = data['feedback'] + if hint is not None: + self.n_correct = hint['args']['passed'] + self.n_all = hint['args']['total'] + else: + self.n_correct = self.n_all = None elif self.type == 'hint': self.feedback = data['feedback'] elif self.type == 'hnt': # obsolete Prolog hint action, with no additional info self.type = 'hint' self.feedback = None + elif self.type == 'plan': + self.index = data.get('index') # Prolog actions elif self.type == 'prolog_solve': @@ -66,17 +83,15 @@ class Action: if self.type in {'insert', 'remove'}: s += ' "' + self.text.replace('\n', '\\n').replace('\t', '\\t') + '" at ' + str(self.offset) elif self.type == 'test': - if self.feedback is not None: - for hint in self.feedback: - if hint['id'] == 'test_results': - args = hint['args'] - s += ' {0} / {1}'.format(args['passed'], args['total']) - break + s += ' {0} / {1}'.format(self.n_correct, self.n_all) elif self.type == 'hint': if self.feedback is not None: s += ' ' + ', '.join(sorted([hint['id'] for hint in self.feedback])) else: s += ' ?' + elif self.type == 'plan': + if self.index is not None: + s += ' ' + str(self.index) elif self.type == 'prolog_solve': s += ' "' + self.query + '"' return s @@ -116,6 +131,7 @@ def parse(data): action = Action(time, packet) except: # ignore any errors while decoding a packet + sys.stderr.write('Error decoding packet: {}'.format(packet)) continue # skip normalization if this is the first action -- cgit v1.2.1