Skip to content

Commit

Permalink
Merge 9e998e8 into 7c23847
Browse files Browse the repository at this point in the history
  • Loading branch information
TheseusGrey committed Sep 6, 2018
2 parents 7c23847 + 9e998e8 commit ddf1c7d
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 1 deletion.
18 changes: 17 additions & 1 deletion aimmo-game-worker/avatar_runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,16 @@ def process_avatar_turn(self, world_map, avatar_state, src_code):

action = self.decide_action(world_map, avatar_state)

except InvalidActionException as e:
print(str(e))
action = WaitAction().serialise()

except Exception as e:
traceback.print_exc()
traceback_list = traceback.format_exc().split('\n')
user_traceback = self.format_user_traceback(traceback_list)
for trace in user_traceback:
print(trace)

LOGGER.info("Code failed to run")
LOGGER.info(e)
action = WaitAction().serialise()
Expand All @@ -62,3 +70,11 @@ def decide_action(self, world_map, avatar_state):
if not isinstance(action, Action):
raise InvalidActionException(action)
return action.serialise()

def format_user_traceback(self, tb_list):
start_of_user_traceback = 0
for i in range(len(tb_list)):
if tb_list[i].__contains__('<string>'):
start_of_user_traceback = i
break
return tb_list[start_of_user_traceback:]
27 changes: 27 additions & 0 deletions aimmo-game-worker/tests/test_avatar_runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -116,3 +116,30 @@ def handle_turn(self, world_map, avatar_state):
runner._update_avatar(src_code=avatar)
with self.assertRaises(InvalidActionException):
runner.decide_action(world_map={}, avatar_state={})

def test_runtime_error_contains_only_user_traceback(self):
avatar = '''class Avatar(object):
def handle_turn(self, world_map, avatar_state):
from simulation.action import MoveAction
from simulation.direction import NORTH
1 + 'foo'
return MoveAction(NORTH)
'''
runner = AvatarRunner()
response = runner.process_avatar_turn(world_map={}, avatar_state={}, src_code=avatar)
self.assertFalse(response['log'].__contains__('/usr/src/app/'))

def test_syntax_error_contains_only_user_traceback(self):
avatar = '''class Avatar(object):
def handle_turn(self, world_map, avatar_state):
from simulation.action import MoveAction
from simulation.direction import NORTH
return MoveAction(NORTH))))
'''
runner = AvatarRunner()
response = runner.process_avatar_turn(world_map={}, avatar_state={}, src_code=avatar)
self.assertFalse(response['log'].__contains__('/usr/src/app/'))

0 comments on commit ddf1c7d

Please sign in to comment.