##// END OF EJS Templates
HTML/Markdown cells no longer saved their rendered output.
HTML/Markdown cells no longer saved their rendered output.

File last commit:

r4519:53df0ac7
r4534:31ac0f3d
Show More
notebookapp.py
235 lines | 8.7 KiB | text/x-python | PythonLexer
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344 """A tornado based IPython notebook server."""
#-----------------------------------------------------------------------------
Brian E. Granger
Updating the notebook to work with the latex master....
r4348 # Copyright (C) 2011 The IPython Development Team
#
# Distributed under the terms of the BSD License. The full license is in
# the file COPYING.txt, distributed as part of this software.
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344 # Imports
#-----------------------------------------------------------------------------
Brian E. Granger
Creating files to new notebook app.
r4339 import logging
import os
Brian E. Granger
Notebook app debugging....
r4345 import signal
import sys
Brian E. Granger
Creating files to new notebook app.
r4339
import zmq
# Install the pyzmq ioloop. This has to be done before anything else from
# tornado is imported.
from zmq.eventloop import ioloop
import tornado.ioloop
tornado.ioloop = ioloop
from tornado import httpserver
from tornado import web
Brian E. Granger
Adding kernel/notebook associations.
r4494 from .kernelmanager import KernelManager, RoutingKernelManager
Brian E. Granger
Massive work on the notebook document format....
r4484 from .sessionmanager import SessionManager
from .handlers import (
Brian E. Granger
Implemented basic notebook browser and fixed numerous bugs.
r4488 NBBrowserHandler, NewHandler, NamedNotebookHandler,
Brian E. Granger
Adding kernel/notebook associations.
r4494 MainKernelHandler, KernelHandler, KernelActionHandler, ZMQStreamHandler,
Brian E. Granger
Starting work on a Markdown cell.
r4507 NotebookRootHandler, NotebookHandler, RSTHandler
Brian E. Granger
Fixing import statments in handlers and notebookapp.
r4340 )
Brian E. Granger
Massive work on the notebook document format....
r4484 from .notebookmanager import NotebookManager
Brian E. Granger
Creating files to new notebook app.
r4339
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344 from IPython.core.application import BaseIPythonApplication
Brian E. Granger
Notebook app debugging....
r4345 from IPython.core.profiledir import ProfileDir
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344 from IPython.zmq.session import Session
Brian E. Granger
Notebook app debugging....
r4345 from IPython.zmq.zmqshell import ZMQInteractiveShell
from IPython.zmq.ipkernel import (
flags as ipkernel_flags,
aliases as ipkernel_aliases,
IPKernelApp
)
from IPython.utils.traitlets import Dict, Unicode, Int, Any, List, Enum
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344
#-----------------------------------------------------------------------------
# Module globals
#-----------------------------------------------------------------------------
Brian E. Granger
Creating files to new notebook app.
r4339
_kernel_id_regex = r"(?P<kernel_id>\w+-\w+-\w+-\w+-\w+)"
_kernel_action_regex = r"(?P<action>restart|interrupt)"
Brian E. Granger
Massive work on the notebook document format....
r4484 _notebook_id_regex = r"(?P<notebook_id>\w+-\w+-\w+-\w+-\w+)"
Brian E. Granger
Creating files to new notebook app.
r4339
Brian E. Granger
Notebook app debugging....
r4345 LOCALHOST = '127.0.0.1'
Brian E. Granger
Updating notebook configuration....
r4519 _examples = """
ipython notebook # start the notebook
ipython notebook --profile=sympy # use the sympy profile
ipython notebook --pylab=inline # pylab in inline plotting mode
ipython notebook --certfile=mycert.pem # use SSL/TLS certificate
ipython notebook --port=5555 --ip=* # Listen on port 5555, all interfaces
"""
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344 #-----------------------------------------------------------------------------
# The Tornado web application
#-----------------------------------------------------------------------------
Brian E. Granger
Creating files to new notebook app.
r4339
Brian E. Granger
Renaming NotebookApplication to NotebookWebApplication.
r4342 class NotebookWebApplication(web.Application):
Brian E. Granger
Creating files to new notebook app.
r4339
Brian E. Granger
Adding kernel/notebook associations.
r4494 def __init__(self, routing_kernel_manager, notebook_manager, log):
Brian E. Granger
Creating files to new notebook app.
r4339 handlers = [
Brian E. Granger
Implemented basic notebook browser and fixed numerous bugs.
r4488 (r"/", NBBrowserHandler),
(r"/new", NewHandler),
Brian E. Granger
Massive work on the notebook document format....
r4484 (r"/%s" % _notebook_id_regex, NamedNotebookHandler),
Brian E. Granger
Adding kernel/notebook associations.
r4494 (r"/kernels", MainKernelHandler),
(r"/kernels/%s" % _kernel_id_regex, KernelHandler),
Brian E. Granger
Creating files to new notebook app.
r4339 (r"/kernels/%s/%s" % (_kernel_id_regex, _kernel_action_regex), KernelActionHandler),
(r"/kernels/%s/iopub" % _kernel_id_regex, ZMQStreamHandler, dict(stream_name='iopub')),
(r"/kernels/%s/shell" % _kernel_id_regex, ZMQStreamHandler, dict(stream_name='shell')),
(r"/notebooks", NotebookRootHandler),
Brian E. Granger
Starting work on a Markdown cell.
r4507 (r"/notebooks/%s" % _notebook_id_regex, NotebookHandler),
(r"/rstservice/render", RSTHandler)
Brian E. Granger
Creating files to new notebook app.
r4339 ]
settings = dict(
template_path=os.path.join(os.path.dirname(__file__), "templates"),
static_path=os.path.join(os.path.dirname(__file__), "static"),
)
web.Application.__init__(self, handlers, **settings)
Brian E. Granger
Adding kernel/notebook associations.
r4494 self.routing_kernel_manager = routing_kernel_manager
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344 self.log = log
Brian E. Granger
Adding kernel/notebook associations.
r4494 self.notebook_manager = notebook_manager
Brian E. Granger
Creating files to new notebook app.
r4339
Brian E. Granger
Work to adapt routers to new Session message protocol.
r4346
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344 #-----------------------------------------------------------------------------
# Aliases and Flags
#-----------------------------------------------------------------------------
flags = dict(ipkernel_flags)
# the flags that are specific to the frontend
# these must be scrubbed before being passed to the kernel,
# or it will raise an error on unrecognized flags
notebook_flags = []
aliases = dict(ipkernel_aliases)
Brian E. Granger
Updating notebook configuration....
r4519 aliases.update({
'ip': 'IPythonNotebookApp.ip',
'port': 'IPythonNotebookApp.port',
'keyfile': 'IPythonNotebookApp.keyfile',
'certfile': 'IPythonNotebookApp.certfile',
'colors': 'ZMQInteractiveShell.colors',
'notebook-dir': 'NotebookManager.notebook_dir'
})
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344
#-----------------------------------------------------------------------------
# IPythonNotebookApp
#-----------------------------------------------------------------------------
class IPythonNotebookApp(BaseIPythonApplication):
Brian E. Granger
Updating notebook configuration....
r4519
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344 name = 'ipython-notebook'
default_config_file_name='ipython_notebook_config.py'
description = """
The IPython HTML Notebook.
This launches a Tornado based HTML Notebook Server that serves up an
HTML5/Javascript Notebook client.
"""
Brian E. Granger
Updating notebook configuration....
r4519 examples = _examples
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344
classes = [IPKernelApp, ZMQInteractiveShell, ProfileDir, Session,
Brian E. Granger
Adding kernel/notebook associations.
r4494 RoutingKernelManager, NotebookManager,
Brian E. Granger
Minor fixes to config system for notebook.
r4515 KernelManager, SessionManager]
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344 flags = Dict(flags)
aliases = Dict(aliases)
kernel_argv = List(Unicode)
Brian E. Granger
Notebook app debugging....
r4345 log_level = Enum((0,10,20,30,40,50,'DEBUG','INFO','WARN','ERROR','CRITICAL'),
default_value=logging.INFO,
config=True,
help="Set the log level by value or name.")
Brian E. Granger
Updating notebook configuration....
r4519 # Network related information.
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344 ip = Unicode(LOCALHOST, config=True,
help="The IP address the notebook server will listen on."
)
Brian E. Granger
Updating notebook configuration....
r4519 def _ip_changed(self, name, old, new):
if new == u'*': self.ip = u''
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344 port = Int(8888, config=True,
help="The port the notebook server will listen on."
)
Brian E. Granger
Updating notebook configuration....
r4519 certfile = Unicode(u'', config=True,
help="""The full path to an SSL/TLS certificate file."""
)
keyfile = Unicode(u'', config=True,
help="""The full path to a private key file for usage with SSL/TLS."""
)
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344
def parse_command_line(self, argv=None):
super(IPythonNotebookApp, self).parse_command_line(argv)
if argv is None:
argv = sys.argv[1:]
self.kernel_argv = list(argv) # copy
# kernel should inherit default config file from frontend
Brian E. Granger
Notebook app debugging....
r4345 self.kernel_argv.append("--KernelApp.parent_appname='%s'"%self.name)
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344 # scrub frontend-specific flags
for a in argv:
Brian E. Granger
Notebook app debugging....
r4345 if a.startswith('-') and a.lstrip('-') in notebook_flags:
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344 self.kernel_argv.remove(a)
Brian E. Granger
Adding kernel/notebook associations.
r4494 def init_configurables(self):
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344 # Don't let Qt or ZMQ swallow KeyboardInterupts.
signal.signal(signal.SIGINT, signal.SIG_DFL)
# Create a KernelManager and start a kernel.
self.kernel_manager = KernelManager(config=self.config, log=self.log)
Brian E. Granger
Adding kernel/notebook associations.
r4494 self.routing_kernel_manager = RoutingKernelManager(config=self.config, log=self.log,
kernel_manager=self.kernel_manager, kernel_argv=self.kernel_argv
)
self.notebook_manager = NotebookManager(config=self.config, log=self.log)
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344
Brian E. Granger
Notebook app debugging....
r4345 def init_logging(self):
super(IPythonNotebookApp, self).init_logging()
# This prevents double log messages because tornado use a root logger that
# self.log is a child of. The logging module dipatches log messages to a log
# and all of its ancenstors until propagate is set to False.
self.log.propagate = False
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344 def initialize(self, argv=None):
super(IPythonNotebookApp, self).initialize(argv)
Brian E. Granger
Adding kernel/notebook associations.
r4494 self.init_configurables()
Brian E. Granger
More work on updating the notebook zmq forwarding.
r4347 self.web_app = NotebookWebApplication(
Brian E. Granger
Adding kernel/notebook associations.
r4494 self.routing_kernel_manager, self.notebook_manager, self.log
Brian E. Granger
More work on updating the notebook zmq forwarding.
r4347 )
Brian E. Granger
Updating notebook configuration....
r4519 if self.certfile:
ssl_options = dict(certfile=self.certfile)
if self.keyfile:
ssl_options['keyfile'] = self.keyfile
else:
ssl_options = None
self.http_server = httpserver.HTTPServer(self.web_app, ssl_options=ssl_options)
if ssl_options is None and not self.ip:
self.log.critical('WARNING: the notebook server is listening on all IP addresses '
'but not using any encryption or authentication. This is highly '
'insecure and not recommended.')
self.http_server.listen(self.port, self.ip)
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344
def start(self):
Brian E. Granger
Updating notebook configuration....
r4519 ip = self.ip if self.ip else '[all ip addresses on your system]'
self.log.info("The IPython Notebook is running at: http://%s:%i" % (ip, self.port))
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344 ioloop.IOLoop.instance().start()
#-----------------------------------------------------------------------------
# Main entry point
#-----------------------------------------------------------------------------
Brian E. Granger
Creating files to new notebook app.
r4339
Brian E. Granger
Initial reorg of files complete....
r4341 def launch_new_instance():
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344 app = IPythonNotebookApp()
app.initialize()
app.start()
Brian E. Granger
Creating files to new notebook app.
r4339