##// END OF EJS Templates
Make code execution more robust.
Gael Varoquaux -
Show More
@@ -101,21 +101,28 b' class LineFrontEndBase(FrontEndBase):'
101 if raw_string is None:
101 if raw_string is None:
102 raw_string = string
102 raw_string = string
103 # Create a false result, in case there is an exception
103 # Create a false result, in case there is an exception
104 result = dict(number=self.prompt_number)
104 self.last_result = dict(number=self.prompt_number)
105 try:
105 try:
106 self.history.input_cache[-1] = raw_string
106 self.history.input_cache[-1] = raw_string
107 result = self.shell.execute(python_string)
107 result = self.shell.execute(python_string)
108 self.last_result = result
108 self.render_result(result)
109 self.render_result(result)
109 except Exception, e:
110 except:
110 self.show_traceback()
111 self.show_traceback()
111 finally:
112 finally:
112 self.prompt_number += 1
113 self.after_execute()
113 self.new_prompt(self.prompt % (result['number'] + 1))
114
114 # Start a new empty history entry
115
115 self._add_history(None, '')
116 def after_execute(self):
116 # The result contains useful information that can be used
117 """ All the operations required after an execution to put the
117 # elsewhere.
118 terminal back in a shape where it is usable.
118 self.last_result = result
119 """
120 self.prompt_number += 1
121 self.new_prompt(self.prompt % (self.last_result['number'] + 1))
122 # Start a new empty history entry
123 self._add_history(None, '')
124 # The result contains useful information that can be used
125 # elsewhere.
119
126
120
127
121 def _on_enter(self):
128 def _on_enter(self):
@@ -124,13 +131,15 b' class LineFrontEndBase(FrontEndBase):'
124 """
131 """
125 current_buffer = self.get_current_edit_buffer()
132 current_buffer = self.get_current_edit_buffer()
126 cleaned_buffer = self.prefilter_input(current_buffer)
133 cleaned_buffer = self.prefilter_input(current_buffer)
127 if self.is_complete(cleaned_buffer):
134 if self.is_complete(cleaned_buffer + '\n'):
135 # The '\n' is important in case prefiltering empties the
136 # line, to get a new prompt.
128 self.execute(cleaned_buffer, raw_string=current_buffer)
137 self.execute(cleaned_buffer, raw_string=current_buffer)
129 else:
138 else:
130 if len(current_buffer.split('\n'))>1:
139 if len(current_buffer.split('\n'))>1:
131 self.write('\n' + self._get_indent_string(current_buffer))
140 self.write(self._get_indent_string(current_buffer))
132 else:
141 else:
133 self.write('\n\t')
142 self.write('\t')
134
143
135
144
136 #--------------------------------------------------------------------------
145 #--------------------------------------------------------------------------
@@ -138,7 +147,7 b' class LineFrontEndBase(FrontEndBase):'
138 #--------------------------------------------------------------------------
147 #--------------------------------------------------------------------------
139
148
140 def _get_indent_string(self, string):
149 def _get_indent_string(self, string):
141 print >>sys.__stderr__, string.split('\n')
150 string = string.replace('\t', ' '*4)
142 string = string.split('\n')[-1]
151 string = string.split('\n')[-1]
143 indent_chars = len(string) - len(string.lstrip())
152 indent_chars = len(string) - len(string.lstrip())
144 indent_string = '\t'*(indent_chars // 4) + \
153 indent_string = '\t'*(indent_chars // 4) + \
@@ -343,6 +343,7 b' class ConsoleWidget(editwindow.EditWindow):'
343 if event.KeyCode in (13, wx.WXK_NUMPAD_ENTER) and \
343 if event.KeyCode in (13, wx.WXK_NUMPAD_ENTER) and \
344 event.Modifiers in (wx.MOD_NONE, wx.MOD_WIN):
344 event.Modifiers in (wx.MOD_NONE, wx.MOD_WIN):
345 catched = True
345 catched = True
346 self.write('\n')
346 self._on_enter()
347 self._on_enter()
347
348
348 elif event.KeyCode == wx.WXK_HOME:
349 elif event.KeyCode == wx.WXK_HOME:
@@ -32,7 +32,7 b' from IPython.frontend.prefilterfrontend import PrefilterFrontEnd'
32 class IPythonWxController(PrefilterFrontEnd, ConsoleWidget):
32 class IPythonWxController(PrefilterFrontEnd, ConsoleWidget):
33
33
34 output_prompt = \
34 output_prompt = \
35 '\n\x01\x1b[0;31m\x02Out[\x01\x1b[1;31m\x02%i\x01\x1b[0;31m\x02]: \x01\x1b[0m\x02'
35 '\x01\x1b[0;31m\x02Out[\x01\x1b[1;31m\x02%i\x01\x1b[0;31m\x02]: \x01\x1b[0m\x02'
36
36
37 #--------------------------------------------------------------------------
37 #--------------------------------------------------------------------------
38 # Public API
38 # Public API
General Comments 0
You need to be logged in to leave comments. Login now