##// END OF EJS Templates
Store last execution result in the interactive shell instance so it can be seen by post execute handlers
Sudarshan Raghunathan -
Show More
@@ -431,6 +431,8 b' class InteractiveShell(SingletonConfigurable):'
431
431
432 last_execution_succeeded = Bool(True, help='Did last executed command succeeded')
432 last_execution_succeeded = Bool(True, help='Did last executed command succeeded')
433
433
434 last_execution_result = Instance('IPython.core.interactiveshell.ExecutionResult', help='Result of executing the last command', allow_none=True)
435
434 def __init__(self, ipython_dir=None, profile_dir=None,
436 def __init__(self, ipython_dir=None, profile_dir=None,
435 user_module=None, user_ns=None,
437 user_module=None, user_ns=None,
436 custom_exceptions=((), None), **kwargs):
438 custom_exceptions=((), None), **kwargs):
@@ -2613,7 +2615,7 b' class InteractiveShell(SingletonConfigurable):'
2613 result = ExecutionResult()
2615 result = ExecutionResult()
2614
2616
2615 if (not raw_cell) or raw_cell.isspace():
2617 if (not raw_cell) or raw_cell.isspace():
2616 self.last_execution_succeeded = True
2618 self.last_execution_succeeded, self.last_execution_result = True, result
2617 return result
2619 return result
2618
2620
2619 if silent:
2621 if silent:
@@ -2624,7 +2626,7 b' class InteractiveShell(SingletonConfigurable):'
2624
2626
2625 def error_before_exec(value):
2627 def error_before_exec(value):
2626 result.error_before_exec = value
2628 result.error_before_exec = value
2627 self.last_execution_succeeded = False
2629 self.last_execution_succeeded, self.last_execution_result = False, result
2628 return result
2630 return result
2629
2631
2630 self.events.trigger('pre_execute')
2632 self.events.trigger('pre_execute')
@@ -2714,7 +2716,7 b' class InteractiveShell(SingletonConfigurable):'
2714 has_raised = self.run_ast_nodes(code_ast.body, cell_name,
2716 has_raised = self.run_ast_nodes(code_ast.body, cell_name,
2715 interactivity=interactivity, compiler=compiler, result=result)
2717 interactivity=interactivity, compiler=compiler, result=result)
2716
2718
2717 self.last_execution_succeeded = not has_raised
2719 self.last_execution_succeeded, self.last_execution_result = not has_raised, result
2718
2720
2719 # Reset this so later displayed values do not modify the
2721 # Reset this so later displayed values do not modify the
2720 # ExecutionResult
2722 # ExecutionResult
@@ -470,6 +470,17 b' class InteractiveShellTestCase(unittest.TestCase):'
470 text = ip.object_inspect_text('a')
470 text = ip.object_inspect_text('a')
471 self.assertIsInstance(text, str)
471 self.assertIsInstance(text, str)
472
472
473 def test_last_execution_result(self):
474 """ Check that last execution result gets set correctly (GH-10702) """
475 result = ip.run_cell('a = 5; a')
476 self.assertTrue(ip.last_execution_succeeded)
477 self.assertEqual(ip.last_execution_result.result, 5)
478
479 result = ip.run_cell('a = x_invalid_id_x')
480 self.assertFalse(ip.last_execution_succeeded)
481 self.assertFalse(ip.last_execution_result.success)
482 self.assertIsInstance(ip.last_execution_result.error_in_exec, NameError)
483
473
484
474 class TestSafeExecfileNonAsciiPath(unittest.TestCase):
485 class TestSafeExecfileNonAsciiPath(unittest.TestCase):
475
486
General Comments 0
You need to be logged in to leave comments. Login now