##// END OF EJS Templates
Merge pull request #1656 from minrk/embed_kernel_tests...
Merge pull request #1656 from minrk/embed_kernel_tests ensure kernels are cleaned up in embed_kernel tests use contextmanager to ensure kernel manager sockets are closed at the end of tests, preventing delayed 'could not close sockets' errors in later tests. closes #1653

File last commit:

r4872:34c10438
r6657:8bfca101 merge
Show More
ipythonx.py
118 lines | 3.2 KiB | text/x-python | PythonLexer
Gael Varoquaux
Add demo app. Add callback for exit to the ipython0 code.
r1391 """
Entry point for a simple application giving a graphical frontend to
ipython.
"""
gvaroquaux
Helpful error message if trying to run the ipythonx entry point without...
r1477 try:
import wx
except ImportError, e:
Brian Granger
Remove usage of deprecated .message attribute of exceptions....
r2293 e.args[0] = """%s
gvaroquaux
Helpful error message if trying to run the ipythonx entry point without...
r1477 ________________________________________________________________________________
You need wxPython to run this application.
Brian Granger
Remove usage of deprecated .message attribute of exceptions....
r2293 """ % e.args[0]
gvaroquaux
Helpful error message if trying to run the ipythonx entry point without...
r1477 raise e
Gael Varoquaux
Add demo app. Add callback for exit to the ipython0 code.
r1391 from wx_frontend import WxController
Gael Varoquaux
First cut of subprocess execution with redirection of stdin/stdout.
r1437 import __builtin__
Gael Varoquaux
Add demo app. Add callback for exit to the ipython0 code.
r1391
Gael Varoquaux
Add a banner.
r1495
Gael Varoquaux
Fixed a race-condition in subprocess execution....
r1438 class IPythonXController(WxController):
Gael Varoquaux
Add demo app. Add callback for exit to the ipython0 code.
r1391 """ Sub class of WxController that adds some application-specific
bindings.
"""
gvaroquaux
Clean up the test application for the wx frontend.
r1475 debug = False
Gael Varoquaux
Proper redirection of keystrokes to subprocesses.
r1450
Gael Varoquaux
Add demo app. Add callback for exit to the ipython0 code.
r1391 def __init__(self, *args, **kwargs):
WxController.__init__(self, *args, **kwargs)
self.ipython0.ask_exit = self.do_exit
Gael Varoquaux
Add a banner.
r1495 # Scroll to top
maxrange = self.GetScrollRange(wx.VERTICAL)
self.ScrollLines(-maxrange)
Gael Varoquaux
Add demo app. Add callback for exit to the ipython0 code.
r1391
def _on_key_down(self, event, skip=True):
# Intercept Ctrl-D to quit
if event.KeyCode == ord('D') and event.ControlDown() and \
gvaroquaux
More code reuse between GUI-independant frontend and Wx frontend: getting...
r1462 self.input_buffer == '' and \
gvaroquaux
Make process execution work under windows.
r1449 self._input_state == 'readline':
Gael Varoquaux
Add demo app. Add callback for exit to the ipython0 code.
r1391 wx.CallAfter(self.ask_exit)
else:
Bernardo B. Marques
remove all trailling spaces
r4872 WxController._on_key_down(self, event, skip=skip)
Gael Varoquaux
Add demo app. Add callback for exit to the ipython0 code.
r1391
def ask_exit(self):
""" Ask the user whether to exit.
"""
gvaroquaux
Fix segfaults under windows.
r1479 self._input_state = 'subprocess'
self.write('\n', refresh=False)
Gael Varoquaux
Add demo app. Add callback for exit to the ipython0 code.
r1391 self.capture_output()
Brian Granger
More work addressing review comments for Fernando's branch....
r2499 self.ipython0.exit()
Gael Varoquaux
Add demo app. Add callback for exit to the ipython0 code.
r1391 self.release_output()
if not self.ipython0.exit_now:
gvaroquaux
Fix segfaults under windows.
r1479 wx.CallAfter(self.new_prompt,
self.input_prompt_template.substitute(
Gael Varoquaux
More tests of the frontend. Improve the ease of testing.
r1458 number=self.last_result['number'] + 1))
gvaroquaux
Better fonts on MacOSX....
r1502 else:
wx.CallAfter(wx.GetApp().Exit)
self.write('Exiting ...', refresh=False)
Bernardo B. Marques
remove all trailling spaces
r4872
Gael Varoquaux
Add demo app. Add callback for exit to the ipython0 code.
r1391
def do_exit(self):
""" Exits the interpreter, kills the windows.
"""
WxController.do_exit(self)
self.release_output()
Gael Varoquaux
Clean up exit code.
r1392 wx.CallAfter(wx.Exit)
Gael Varoquaux
Add demo app. Add callback for exit to the ipython0 code.
r1391
Gael Varoquaux
Fixed a race-condition in subprocess execution....
r1438 class IPythonX(wx.Frame):
""" Main frame of the IPythonX app.
Gael Varoquaux
Add demo app. Add callback for exit to the ipython0 code.
r1391 """
gvaroquaux
Tweak the debug mode....
r1484 def __init__(self, parent, id, title, debug=False):
Gael Varoquaux
Add demo app. Add callback for exit to the ipython0 code.
r1391 wx.Frame.__init__(self, parent, id, title, size=(300,250))
self._sizer = wx.BoxSizer(wx.VERTICAL)
gvaroquaux
Tweak the debug mode....
r1484 self.shell = IPythonXController(self, debug=debug)
Gael Varoquaux
Add demo app. Add callback for exit to the ipython0 code.
r1391 self._sizer.Add(self.shell, 1, wx.EXPAND)
self.SetSizer(self._sizer)
self.SetAutoLayout(1)
self.Show(True)
Gael Varoquaux
IPythonX: terminate the mainloop when exiting, to close the child windows...
r1732 wx.EVT_CLOSE(self, self.on_close)
Bernardo B. Marques
remove all trailling spaces
r4872
Gael Varoquaux
IPythonX: terminate the mainloop when exiting, to close the child windows...
r1732 def on_close(self, event):
Bernardo B. Marques
remove all trailling spaces
r4872 """ Called on closing the windows.
Gael Varoquaux
IPythonX: terminate the mainloop when exiting, to close the child windows...
r1732 Stops the event loop, to close all the child windows.
"""
wx.CallAfter(wx.Exit)
Gael Varoquaux
Add demo app. Add callback for exit to the ipython0 code.
r1391
def main():
gvaroquaux
Clean up the test application for the wx frontend.
r1475 from optparse import OptionParser
usage = """usage: %prog [options]
Simple graphical frontend to IPython, using WxWidgets."""
parser = OptionParser(usage=usage)
parser.add_option("-d", "--debug",
action="store_true", dest="debug", default=False,
help="Enable debug message for the wx frontend.")
options, args = parser.parse_args()
gvaroquaux
Fix segfaults under windows.
r1479 # Clear the options, to avoid having the ipython0 instance complain
import sys
sys.argv = sys.argv[:1]
Gael Varoquaux
Add demo app. Add callback for exit to the ipython0 code.
r1391 app = wx.PySimpleApp()
gvaroquaux
Tweak the debug mode....
r1484 frame = IPythonX(None, wx.ID_ANY, 'IPythonX', debug=options.debug)
Gael Varoquaux
Add demo app. Add callback for exit to the ipython0 code.
r1391 frame.shell.SetFocus()
frame.shell.app = app
frame.SetSize((680, 460))
app.MainLoop()
if __name__ == '__main__':
main()