From fc51599fd58f85b82f107535dda9c90fac58adaa Mon Sep 17 00:00:00 2001 From: timv Date: Sun, 9 Jun 2013 15:47:43 -0400 Subject: [PATCH] fixed some exceptions that we're properly caught. --- src/Dyna/Backend/Python/repl.py | 48 +++++++++++++++------------------ 1 file changed, 22 insertions(+), 26 deletions(-) diff --git a/src/Dyna/Backend/Python/repl.py b/src/Dyna/Backend/Python/repl.py index e3e2bf8..3893b3c 100644 --- a/src/Dyna/Backend/Python/repl.py +++ b/src/Dyna/Backend/Python/repl.py @@ -1,8 +1,8 @@ import os, sys import cmd, readline -from utils import blue, yellow, green, magenta, ip +import interpreter +from utils import blue, yellow, green, magenta, ip, DynaCompilerError, AggregatorConflict from chart import _repr -from interpreter import AggregatorConflict from config import dotdynadir import debug @@ -29,7 +29,7 @@ class REPL(cmd.Cmd, object): self.interp.dump_rules() def do_retract_rule(self, idx): - self.interp.remove_rule(idx) + self.interp.retract_rule(idx) def do_retract_item(self, item): self.interp.retract_item(item) @@ -51,24 +51,12 @@ class REPL(cmd.Cmd, object): """ return line - def postcmd(self, stop, line): + def postcmd(self, stop, line): self.lineno += 1 return stop def do_chart(self, _): -# if not args: self.interp.dump_charts() -# else: -# unrecognized = set(args.split()) - set(interp.chart.keys()) -# for f in unrecognized: -# print 'unrecognized predicate', f -# if unrecognized: -# print 'available:\n\t' + '\t'.join(chart.keys()) -# return -# for f in args.split(): -# print chart[f] -# print -# interp.dump_errors() def emptyline(self): """Do nothing on empty input line""" @@ -120,21 +108,29 @@ class REPL(cmd.Cmd, object): print "ERROR: Line doesn't end with period." return try: - src = self.interp.dynac_code(line) # failure. - - changed = self.interp.do(src) + src = self.interp.dynac_code(line) # might raise DynaCompilerError + changed = self.interp.do(src) # throws AggregatorConflict except AggregatorConflict as e: print 'AggregatorConflict:', e + print '> new rule(s) were not added to program.' + + except DynaCompilerError as e: + print 'DynaCompilerError:' + print e + print '> new rule(s) were not added to program.' else: - if not changed: - return - print '=============' - for x, v in sorted(changed.items()): - print '%s := %s' % (x, _repr(v)) - print - self.interp.dump_errors() + self._changed(changed) + + def _changed(self, changed): + if not changed: + return + print '=============' + for x, v in sorted(changed.items()): + print '%s := %s' % (x, _repr(v)) + print + self.interp.dump_errors() def do_draw(self, _): self.interp.draw() -- 2.50.1