##// END OF EJS Templates
allow_none=False by default for Type and Instance
allow_none=False by default for Type and Instance

File last commit:

r20940:4c8e4259
r20940:4c8e4259
Show More
notebookapp.py
1127 lines | 41.6 KiB | text/x-python | PythonLexer
MinRK
Ensure handler patterns are str, not unicode...
r6067 # coding: utf-8
MinRK
disable specifying kernel args on the notebook command-line...
r16374 """A tornado based IPython notebook server."""
Brian E. Granger
More review changes....
r4609
MinRK
disable specifying kernel args on the notebook command-line...
r16374 # Copyright (c) IPython Development Team.
# Distributed under the terms of the Modified BSD License.
Brian E. Granger
More review changes....
r4609
Thomas Kluyver
Convert print statements to print function calls...
r13348 from __future__ import print_function
MinRK
informative warning on `ipython notebook --pylab`...
r16375
MinRK
persist notebook server cookie secret in security dir...
r17141 import base64
Min RK
add '?v=<date>' to require URLs...
r19069 import datetime
Brian E. Granger
Autotry additional ports if 8888 if already in use.
r4548 import errno
Thomas Kluyver
Add support for notebook server extensions...
r19456 import importlib
Thomas Kluyver
Write notebook server info file in security directory
r14063 import io
import json
Brian E. Granger
Creating files to new notebook app.
r4339 import logging
import os
Bradley M. Froehle
NotebookApp: Make the number of ports to retry user configurable....
r7234 import random
MinRK
make CORS configurable...
r17106 import re
MinRK
confirm notebook shutdown on SIGINT...
r6508 import select
Brian E. Granger
Notebook app debugging....
r4345 import signal
Brian E. Granger
Autotry additional ports if 8888 if already in use.
r4548 import socket
Brian E. Granger
Notebook app debugging....
r4345 import sys
Fernando Perez
Start webbrowser in a thread. Prevents lockup with Chrome....
r5212 import threading
Thomas Kluyver
Add ability to open the notebook in a browser when it starts.
r5065 import webbrowser
Brian E. Granger
Creating files to new notebook app.
r4339
MinRK
move DEFAULT_STATIC_FILES_PATH to frontend.html.notebook...
r10199
Min RK
bump pyzmq version dependency to 13...
r20354 # check for pyzmq
MinRK
move check_for_zmq to utils.zmqrelated
r10201 from IPython.utils.zmqrelated import check_for_zmq
Min RK
bump pyzmq version dependency to 13...
r20354 check_for_zmq('13', 'IPython.html')
MinRK
move DEFAULT_STATIC_FILES_PATH to frontend.html.notebook...
r10199
Cameron Bates
Move environment setting from handler to the notebook application
r8840 from jinja2 import Environment, FileSystemLoader
Brian E. Granger
Creating files to new notebook app.
r4339
# Install the pyzmq ioloop. This has to be done before anything else from
# tornado is imported.
from zmq.eventloop import ioloop
MinRK
add ioloop.install to backported patches
r6631 ioloop.install()
Brian E. Granger
Creating files to new notebook app.
r4339
MinRK
bump minimum tornado version to 3.1.0...
r13313 # check for tornado 3.1.0
Min RK
bump minimum tornado version to 4.0...
r18739 msg = "The IPython Notebook requires tornado >= 4.0"
MinRK
move DEFAULT_STATIC_FILES_PATH to frontend.html.notebook...
r10199 try:
import tornado
except ImportError:
raise ImportError(msg)
try:
version_info = tornado.version_info
except AttributeError:
raise ImportError(msg + ", but you have < 1.1.0")
Min RK
bump minimum tornado version to 4.0...
r18739 if version_info < (4,0):
MinRK
move DEFAULT_STATIC_FILES_PATH to frontend.html.notebook...
r10199 raise ImportError(msg + ", but you have %s" % tornado.version)
Brian E. Granger
Creating files to new notebook app.
r4339 from tornado import httpserver
from tornado import web
MinRK
use app name on tornado log statements...
r18117 from tornado.log import LogFormatter, app_log, access_log, gen_log
Brian E. Granger
Creating files to new notebook app.
r4339
Scott Sanderson
DEV: Support for configurable list of extra jinja template directories.
r18693 from IPython.html import (
DEFAULT_STATIC_FILES_PATH,
Scott Sanderson
DEV: Add IPython.html to the default template path....
r18695 DEFAULT_TEMPLATE_PATH_LIST,
Scott Sanderson
DEV: Support for configurable list of extra jinja template directories.
r18693 )
MinRK
render custom HTML for error pages
r13939 from .base.handlers import Template404
MinRK
adjustments to notebook app logging...
r14645 from .log import log_request
Brian E. Granger
Fixing imports for frontend tests.
r10666 from .services.kernels.kernelmanager import MappingKernelManager
Scott Sanderson
MAINT: Use `Type` instead of `DottedObjectName` for managers....
r19636 from .services.config import ConfigManager
MinRK
rename notebooks service to contents service...
r17524 from .services.contents.manager import ContentsManager
from .services.contents.filemanager import FileContentsManager
Brian E. Granger
Fixing imports for frontend tests.
r10666 from .services.clusters.clustermanager import ClusterManager
Zachary Sailer
manual rebase notebookapp.py
r12982 from .services.sessions.sessionmanager import SessionManager
Brian E. Granger
Splitting handlers into different files....
r10642
Scott Sanderson
MAINT: Use `Type` instead of `DottedObjectName` Log{in,out}Handler.
r19637 from .auth.login import LoginHandler
from .auth.logout import LogoutHandler
Scott Sanderson
DEV: Set `klass=object` for Log{in,out}Handler....
r19639 from .base.handlers import IPythonHandler, FileFindHandler
Brian E. Granger
Creating files to new notebook app.
r4339
Thomas Kluyver
Fix starting notebook server with file/directory at command line....
r16041 from IPython.config import Config
Fernando Perez
Define flags in application that's going to use them.
r5762 from IPython.config.application import catch_config_error, boolean_flag
MinRK
informative warning on `ipython notebook --pylab`...
r16375 from IPython.core.application import (
BaseIPythonApplication, base_flags, base_aliases,
Brian E. Granger
Notebook app debugging....
r4345 )
MinRK
informative warning on `ipython notebook --pylab`...
r16375 from IPython.core.profiledir import ProfileDir
from IPython.kernel import KernelManager
Thomas Kluyver
Create REST API for kernel specs
r16684 from IPython.kernel.kernelspec import KernelSpecManager
Min RK
deprecate default_secure decorator...
r20570 from IPython.kernel.zmq.session import Session
MinRK
add NotebookNotary to NotebookApp's class list...
r15791 from IPython.nbformat.sign import NotebookNotary
Brian Granger
Refactoring notebook managers and adding Azure backed storage....
r8180 from IPython.utils.importstring import import_item
MinRK
check submodules when starting the notebook server...
r10557 from IPython.utils import submodule
Thomas Kluyver
Check for pids when listing nbserver processes
r17181 from IPython.utils.process import check_pid
Brian Granger
Refactoring notebook managers and adding Azure backed storage....
r8180 from IPython.utils.traitlets import (
Thomas Kluyver
Create REST API for kernel specs
r16684 Dict, Unicode, Integer, List, Bool, Bytes, Instance,
Scott Sanderson
MAINT: Use `Type` instead of `DottedObjectName` Log{in,out}Handler.
r19637 TraitError, Type,
Brian Granger
Refactoring notebook managers and adding Azure backed storage....
r8180 )
MinRK
Ensure handler patterns are str, not unicode...
r6067 from IPython.utils import py3compat
MinRK
add js_extensions_path...
r12800 from IPython.utils.path import filefind, get_ipython_dir
Min RK
add '?v=<date>' to require URLs...
r19069 from IPython.utils.sysinfo import get_sys_info
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344
Min RK
allow system-wide paths for nbextensions...
r19854 from .nbextensions import SYSTEM_NBEXTENSIONS_DIRS
Brian E. Granger
Splitting handlers into different files....
r10642 from .utils import url_path_join
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
Brian E. Granger
Updating notebook configuration....
r4519 _examples = """
ipython notebook # start the notebook
ipython notebook --profile=sympy # use the sympy profile
ipython notebook --certfile=mycert.pem # use SSL/TLS certificate
"""
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344 #-----------------------------------------------------------------------------
Andrew Straw
allow setting base_project_url and base_kernel_url to non-default values
r6004 # Helper functions
#-----------------------------------------------------------------------------
Bradley M. Froehle
NotebookApp: Make the number of ports to retry user configurable....
r7234 def random_ports(port, n):
"""Generate a list of n random ports near the given port.
The first 5 ports will be sequential, and the remaining n-5 will be
randomly selected in the range [port-2*n, port+2*n].
"""
for i in range(min(5, n)):
yield port + i
for i in range(n-5):
MinRK
limit random ports to positive values
r12843 yield max(1, port + random.randint(-2*n, 2*n))
Bradley M. Froehle
NotebookApp: Make the number of ports to retry user configurable....
r7234
Brian E. Granger
More work on the handlers
r10647 def load_handlers(name):
"""Load the (URL pattern, handler) tuples for each component."""
MinRK
update references for IPython.html
r11035 name = 'IPython.html.' + name
Brian E. Granger
More work on the handlers
r10647 mod = __import__(name, fromlist=['default_handlers'])
return mod.default_handlers
Andrew Straw
allow setting base_project_url and base_kernel_url to non-default values
r6004 #-----------------------------------------------------------------------------
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
MinRK
rename notebooks service to contents service...
r17524 def __init__(self, ipython_app, kernel_manager, contents_manager,
Thomas Kluyver
First stab at ConfigManager class
r19083 cluster_manager, session_manager, kernel_spec_manager,
config_manager, log,
MinRK
make the default url customizable...
r17778 base_url, default_url, settings_overrides, jinja_env_options):
Brian E. Granger
More work on the handlers
r10647
Brian E. Granger
Refactor notebookapp __init__ method.
r10656 settings = self.init_settings(
MinRK
rename notebooks service to contents service...
r17524 ipython_app, kernel_manager, contents_manager, cluster_manager,
Thomas Kluyver
First stab at ConfigManager class
r19083 session_manager, kernel_spec_manager, config_manager, log, base_url,
default_url, settings_overrides, jinja_env_options)
Brian E. Granger
Refactor notebookapp __init__ method.
r10656 handlers = self.init_handlers(settings)
super(NotebookWebApplication, self).__init__(handlers, **settings)
Timo Paulssen
use IPythons config subsystem to allow overrides to the tornado web app.
r5664
MinRK
rename notebooks service to contents service...
r17524 def init_settings(self, ipython_app, kernel_manager, contents_manager,
Thomas Kluyver
Create REST API for kernel specs
r16684 cluster_manager, session_manager, kernel_spec_manager,
Thomas Kluyver
First stab at ConfigManager class
r19083 config_manager,
MinRK
make the default url customizable...
r17778 log, base_url, default_url, settings_overrides,
Thomas Kluyver
Create REST API for kernel specs
r16684 jinja_env_options=None):
Matthias Bussonnier
drop more 2.6 hacks
r18038
Scott Sanderson
DEV: Support for configurable list of extra jinja template directories.
r18693 _template_path = settings_overrides.get(
"template_path",
ipython_app.template_file_path,
)
Matthias BUSSONNIER
Expand user home path in template search path....
r17896 if isinstance(_template_path, str):
_template_path = (_template_path,)
template_path = [os.path.expanduser(path) for path in _template_path]
Matthias BUSSONNIER
Allow to pass option to jinja env...
r15449 jenv_opt = jinja_env_options if jinja_env_options else {}
Matthias BUSSONNIER
Expand user home path in template search path....
r17896 env = Environment(loader=FileSystemLoader(template_path), **jenv_opt)
Min RK
add '?v=<date>' to require URLs...
r19069
sys_info = get_sys_info()
if sys_info['commit_source'] == 'repository':
# don't cache (rely on 304) when working from master
version_hash = ''
else:
# reset the cache on server restart
version_hash = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
Matthias BUSSONNIER
allows password and prefix for notebook...
r7797 settings = dict(
MinRK
cleanup IPython handler settings...
r10355 # basics
MinRK
adjustments to notebook app logging...
r14645 log_function=log_request,
MinRK
s/base_project_url/base_url/...
r15238 base_url=base_url,
MinRK
make the default url customizable...
r17778 default_url=default_url,
MinRK
cleanup IPython handler settings...
r10355 template_path=template_path,
MinRK
handle single static path in FileFindHandler
r7930 static_path=ipython_app.static_file_path,
MinRK
use FileFindHandler in NotebookApp...
r7923 static_handler_class = FileFindHandler,
MinRK
s/base_project_url/base_url/...
r15238 static_url_prefix = url_path_join(base_url,'/static/'),
Min RK
don't cache files in static/custom or nbextensions...
r19070 static_handler_args = {
# don't cache custom.js
'no_cache_paths': [url_path_join(base_url, 'static', 'custom')],
},
Min RK
add '?v=<date>' to require URLs...
r19069 version_hash=version_hash,
MinRK
cleanup IPython handler settings...
r10355
# authentication
MinRK
make cookie_secret configurable...
r10784 cookie_secret=ipython_app.cookie_secret,
MinRK
s/base_project_url/base_url/...
r15238 login_url=url_path_join(base_url,'/login'),
Phil Elson
Added authentication configuration for the notebook app.
r19322 login_handler_class=ipython_app.login_handler_class,
Min RK
make logout_handler overridable
r19326 logout_handler_class=ipython_app.logout_handler_class,
MinRK
cleanup IPython handler settings...
r10355 password=ipython_app.password,
Phil Elson
Added authentication configuration for the notebook app.
r19322
MinRK
cleanup IPython handler settings...
r10355 # managers
kernel_manager=kernel_manager,
MinRK
rename notebooks service to contents service...
r17524 contents_manager=contents_manager,
MinRK
cleanup IPython handler settings...
r10355 cluster_manager=cluster_manager,
Zachary Sailer
manual rebase notebookapp.py
r12982 session_manager=session_manager,
Thomas Kluyver
Create REST API for kernel specs
r16684 kernel_spec_manager=kernel_spec_manager,
Thomas Kluyver
First stab at ConfigManager class
r19083 config_manager=config_manager,
Zachary Sailer
manual rebase notebookapp.py
r12982
MinRK
cleanup IPython handler settings...
r10355 # IPython stuff
Phil Elson
Added authentication configuration for the notebook app.
r19322 nbextensions_path=ipython_app.nbextensions_path,
MinRK
restore websocket_url configurable...
r17303 websocket_url=ipython_app.websocket_url,
MinRK
add missing mathjax_url to new settings dict
r10388 mathjax_url=ipython_app.mathjax_url,
MinRK
cleanup IPython handler settings...
r10355 config=ipython_app.config,
Matthias BUSSONNIER
Allow to pass option to jinja env...
r15449 jinja2_env=env,
Thomas Kluyver
Only display terminals in dashboard if terminals are available
r18557 terminals_available=False, # Set later if terminals are available
Matthias BUSSONNIER
allows password and prefix for notebook...
r7797 )
# allow custom overrides for the tornado web app.
settings.update(settings_overrides)
Brian E. Granger
Refactor notebookapp __init__ method.
r10656 return settings
Matthias BUSSONNIER
allows password and prefix for notebook...
r7797
Brian E. Granger
Refactor notebookapp __init__ method.
r10656 def init_handlers(self, settings):
Min RK
address review in contents service...
r18758 """Load the (URL pattern, handler) tuples for each component."""
# Order matters. The first handler to match the URL will handle the request.
Brian E. Granger
Refactor notebookapp __init__ method.
r10656 handlers = []
handlers.extend(load_handlers('tree.handlers'))
Phil Elson
Added authentication configuration for the notebook app.
r19322 handlers.extend([(r"/login", settings['login_handler_class'])])
Min RK
make logout_handler overridable
r19326 handlers.extend([(r"/logout", settings['logout_handler_class'])])
MinRK
finish up FilesHandler...
r18363 handlers.extend(load_handlers('files.handlers'))
Brian E. Granger
Moving web services into a subdir.
r10665 handlers.extend(load_handlers('notebook.handlers'))
Thomas Kluyver
Add HTTP handlers for nbconvert
r13827 handlers.extend(load_handlers('nbconvert.handlers'))
Thomas Kluyver
Refactor kernelspec resource handler to separate URL prefix
r16706 handlers.extend(load_handlers('kernelspecs.handlers'))
Thomas Kluyver
Rename texteditor files & folders to edit
r19074 handlers.extend(load_handlers('edit.handlers'))
Thomas Kluyver
Add REST API for retrieving, storing and updating config
r18703 handlers.extend(load_handlers('services.config.handlers'))
Brian E. Granger
Moving web services into a subdir.
r10665 handlers.extend(load_handlers('services.kernels.handlers'))
MinRK
rename notebooks service to contents service...
r17524 handlers.extend(load_handlers('services.contents.handlers'))
Brian E. Granger
Moving web services into a subdir.
r10665 handlers.extend(load_handlers('services.clusters.handlers'))
Zachary Sailer
manual rebase notebookapp.py
r12982 handlers.extend(load_handlers('services.sessions.handlers'))
Thomas Kluyver
Separate listing nbconvert exporters to /api/nbconvert
r13837 handlers.extend(load_handlers('services.nbconvert.handlers'))
Thomas Kluyver
Create REST API for kernel specs
r16684 handlers.extend(load_handlers('services.kernelspecs.handlers'))
Kyle Kelley
Load the security service handlers....
r19145 handlers.extend(load_handlers('services.security.handlers'))
Manuel Riel
add new FilesHandler to serve files from ContentsManager.
r18138 handlers.append(
Min RK
don't cache files in static/custom or nbextensions...
r19070 (r"/nbextensions/(.*)", FileFindHandler, {
'path': settings['nbextensions_path'],
'no_cache_paths': ['/'], # don't cache anything in nbextensions
}),
MinRK
rename notebooks service to contents service...
r17524 )
Min RK
address review in contents service...
r18758 # register base handlers last
MinRK
Remove separate 'path', 'name' in Contents API...
r18749 handlers.extend(load_handlers('base.handlers'))
MinRK
make the default url customizable...
r17778 # set the URL that will be redirected from `/`
handlers.append(
(r'/?', web.RedirectHandler, {
Min RK
ensure default_url includes base_url
r20212 'url' : settings['default_url'],
MinRK
make the default url customizable...
r17778 'permanent': False, # want 302, not 301
})
)
MinRK
s/base_project_url/base_url/...
r15238 # prepend base_url onto the patterns that we match
Andrew Straw
allow setting base_project_url and base_kernel_url to non-default values
r6004 new_handlers = []
for handler in handlers:
MinRK
s/base_project_url/base_url/...
r15238 pattern = url_path_join(settings['base_url'], handler[0])
MinRK
cleanup IPython handler settings...
r10355 new_handler = tuple([pattern] + list(handler[1:]))
new_handlers.append(new_handler)
MinRK
render custom HTML for error pages
r13939 # add 404 on the end, which will catch everything that falls through
new_handlers.append((r'(.*)', Template404))
Brian E. Granger
Refactor notebookapp __init__ method.
r10656 return new_handlers
Brian E. Granger
Creating files to new notebook app.
r4339
Thomas Kluyver
Command line entry point to list running notebook servers
r14177 class NbserverListApp(BaseIPythonApplication):
description="List currently running notebook servers in this profile."
flags = dict(
json=({'NbserverListApp': {'json': True}},
"Produce machine-readable JSON output."),
)
json = Bool(False, config=True,
help="If True, each line of output will be a JSON object with the "
"details from the server info file.")
def start(self):
if not self.json:
print("Currently running servers:")
Thomas Kluyver
Make names in JSON more consistent as per @ellisonbg's suggestion.
r14179 for serverinfo in list_running_servers(self.profile):
Thomas Kluyver
Command line entry point to list running notebook servers
r14177 if self.json:
print(json.dumps(serverinfo))
else:
Thomas Kluyver
Make names in JSON more consistent as per @ellisonbg's suggestion.
r14179 print(serverinfo['url'], "::", serverinfo['notebook_dir'])
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
#-----------------------------------------------------------------------------
MinRK
informative warning on `ipython notebook --pylab`...
r16375 flags = dict(base_flags)
Thomas Kluyver
Add ability to open the notebook in a browser when it starts.
r5065 flags['no-browser']=(
MinRK
fix --no-browser flag in notebook after rename
r5128 {'NotebookApp' : {'open_browser' : False}},
Thomas Kluyver
Add ability to open the notebook in a browser when it starts.
r5065 "Don't open the notebook in a browser after startup."
)
MinRK
informative warning on `ipython notebook --pylab`...
r16375 flags['pylab']=(
{'NotebookApp' : {'pylab' : 'warn'}},
"DISABLED: use %pylab or %matplotlib in the notebook to enable matplotlib."
)
MinRK
allow the notebook to run without MathJax...
r5547 flags['no-mathjax']=(
{'NotebookApp' : {'enable_mathjax' : False}},
"""Disable MathJax
MathJax is the javascript library IPython uses to render math/LaTeX. It is
very large, so you may want to disable it if you have a slow internet
connection, or for offline use of the notebook.
When disabled, equations etc. will appear as their untransformed TeX source.
"""
)
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344
MinRK
update contents per further review...
r17537 # Add notebook manager flags
flags.update(boolean_flag('script', 'FileContentsManager.save_script',
'DEPRECATED, IGNORED',
'DEPRECATED, IGNORED'))
MinRK
informative warning on `ipython notebook --pylab`...
r16375 aliases = dict(base_aliases)
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344
Brian E. Granger
Updating notebook configuration....
r4519 aliases.update({
Brian E. Granger
Misc changes to the notebook....
r5104 'ip': 'NotebookApp.ip',
'port': 'NotebookApp.port',
Bradley M. Froehle
NotebookApp: Make the number of ports to retry user configurable....
r7234 'port-retries': 'NotebookApp.port_retries',
MinRK
ip/transport live in KernelManager now...
r9177 'transport': 'KernelManager.transport',
Brian E. Granger
Misc changes to the notebook....
r5104 'keyfile': 'NotebookApp.keyfile',
'certfile': 'NotebookApp.certfile',
MinRK
reorganize who knows what about paths...
r15420 'notebook-dir': 'NotebookApp.notebook_dir',
Paul Ivanov
added --browser option to notebook...
r6116 'browser': 'NotebookApp.browser',
MinRK
informative warning on `ipython notebook --pylab`...
r16375 'pylab': 'NotebookApp.pylab',
Brian E. Granger
Updating notebook configuration....
r4519 })
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344
#-----------------------------------------------------------------------------
Brian E. Granger
Misc changes to the notebook....
r5104 # NotebookApp
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344 #-----------------------------------------------------------------------------
Brian E. Granger
Misc changes to the notebook....
r5104 class NotebookApp(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'
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
MinRK
informative warning on `ipython notebook --pylab`...
r16375 aliases = aliases
flags = flags
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344
MinRK
informative warning on `ipython notebook --pylab`...
r16375 classes = [
KernelManager, ProfileDir, Session, MappingKernelManager,
MinRK
rename notebooks service to contents service...
r17524 ContentsManager, FileContentsManager, NotebookNotary,
Min RK
Add KernelSpecManager.whitelist...
r20316 KernelSpecManager,
MinRK
informative warning on `ipython notebook --pylab`...
r16375 ]
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344 flags = Dict(flags)
aliases = Dict(aliases)
Thomas Kluyver
Command line entry point to list running notebook servers
r14177
subcommands = dict(
list=(NbserverListApp, NbserverListApp.description.splitlines()[0]),
)
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344
MinRK
use tornado logging in NotebookApp...
r16358 _log_formatter_cls = LogFormatter
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344
MinRK
cleanup IPython handler settings...
r10355 def _log_level_default(self):
return logging.INFO
Brian E. Granger
Notebook app debugging....
r4345
MinRK
use tornado logging in NotebookApp...
r16358 def _log_datefmt_default(self):
"""Exclude date from default date format"""
return "%H:%M:%S"
MinRK
hook up tornado 3's loggers to our handlers
r10358 def _log_format_default(self):
"""override default log format to include time"""
MinRK
use tornado logging in NotebookApp...
r16358 return u"%(color)s[%(levelname)1.1s %(asctime)s.%(msecs).03d %(name)s]%(end_color)s %(message)s"
MinRK
hook up tornado 3's loggers to our handlers
r10358
Paul Ivanov
set auto_create flag for notebook apps
r5847 # create requested profiles by default, if they don't exist:
auto_create = Bool(True)
Puneeth Chaganti
ENH: Open a notebook from the command line...
r6724 # file to be opened in the notebook server
MinRK
write config instead of direct assignment from the command-line...
r15461 file_to_run = Unicode('', config=True)
Puneeth Chaganti
ENH: Open a notebook from the command line...
r6724
MinRK
make CORS configurable...
r17106 # Network related information
MinRK
s/cors_/allow_/...
r17116 allow_origin = Unicode('', config=True,
MinRK
make CORS configurable...
r17106 help="""Set the Access-Control-Allow-Origin header
Use '*' to allow any origin to access your server.
MinRK
s/cors_/allow_/...
r17116 Takes precedence over allow_origin_pat.
MinRK
make CORS configurable...
r17106 """
)
MinRK
s/cors_/allow_/...
r17116 allow_origin_pat = Unicode('', config=True,
MinRK
make CORS configurable...
r17106 help="""Use a regular expression for the Access-Control-Allow-Origin header
Requests from an origin matching the expression will get replies with:
Access-Control-Allow-Origin: origin
where `origin` is the origin of the request.
MinRK
s/cors_/allow_/...
r17116 Ignored if allow_origin is set.
MinRK
make CORS configurable...
r17106 """
)
MinRK
s/cors_/allow_/...
r17116 allow_credentials = Bool(False, config=True,
MinRK
make CORS configurable...
r17106 help="Set the Access-Control-Allow-Credentials: true header"
)
MinRK
make the default url customizable...
r17778 default_url = Unicode('/tree', config=True,
help="The default URL to redirect to from `/`"
)
MinRK
use 'localhost' as default for the notebook server...
r16334 ip = Unicode('localhost', config=True,
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344 help="The IP address the notebook server will listen on."
)
Min RK
fallback on 127.0.0.1 if localhost cannot be bound...
r20593 def _ip_default(self):
"""Return localhost if available, 127.0.0.1 otherwise.
On some (horribly broken) systems, localhost cannot be bound.
"""
s = socket.socket()
try:
s.bind(('localhost', 0))
Min RK
warn about failure to bind to localhost...
r20594 except socket.error as e:
self.log.warn("Cannot bind to localhost, using 127.0.0.1 as default ip\n%s", e)
Min RK
fallback on 127.0.0.1 if localhost cannot be bound...
r20593 return '127.0.0.1'
else:
s.close()
return 'localhost'
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344
Brian E. Granger
Updating notebook configuration....
r4519 def _ip_changed(self, name, old, new):
if new == u'*': self.ip = u''
MinRK
add Integer traitlet...
r5344 port = Integer(8888, config=True,
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344 help="The port the notebook server will listen on."
)
Bradley M. Froehle
NotebookApp: Make the number of ports to retry user configurable....
r7234 port_retries = Integer(50, config=True,
help="The number of additional ports to try if the specified port is not available."
)
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344
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."""
)
MinRK
make cookie_secret configurable...
r10784
MinRK
persist notebook server cookie secret in security dir...
r17141 cookie_secret_file = Unicode(config=True,
help="""The file where the cookie secret is stored."""
)
def _cookie_secret_file_default(self):
if self.profile_dir is None:
return ''
return os.path.join(self.profile_dir.security_dir, 'notebook_cookie_secret')
MinRK
make cookie_secret configurable...
r10784 cookie_secret = Bytes(b'', config=True,
help="""The random bytes used to secure cookies.
By default this is a new random number every time you start the Notebook.
Set it to a value in a config file to enable logins to persist across server sessions.
MinRK
add note about sharing config files with cookie_secret
r10863
Note: Cookie secrets should be kept private, do not share config files with
cookie_secret stored in plaintext (you can read the value from a file).
MinRK
make cookie_secret configurable...
r10784 """
)
def _cookie_secret_default(self):
MinRK
persist notebook server cookie secret in security dir...
r17141 if os.path.exists(self.cookie_secret_file):
with io.open(self.cookie_secret_file, 'rb') as f:
return f.read()
else:
secret = base64.encodestring(os.urandom(1024))
self._write_cookie_secret_file(secret)
return secret
def _write_cookie_secret_file(self, secret):
"""write my secret to my secret_file"""
self.log.info("Writing notebook server cookie secret to %s", self.cookie_secret_file)
with io.open(self.cookie_secret_file, 'wb') as f:
f.write(secret)
try:
os.chmod(self.cookie_secret_file, 0o600)
except OSError:
self.log.warn(
"Could not set permissions on %s",
self.cookie_secret_file
)
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344
MinRK
notebook auth adjustments...
r4705 password = Unicode(u'', config=True,
Stefan van der Walt
Integrate hashed passwords into the notebook.
r5321 help="""Hashed password to use for web authentication.
Fernando Perez
Fix failing doctests and post correct example of passwd() usage.
r5337 To generate, type in a python/IPython shell:
Stefan van der Walt
Integrate hashed passwords into the notebook.
r5321
Fernando Perez
Fix failing doctests and post correct example of passwd() usage.
r5337 from IPython.lib import passwd; passwd()
Stefan van der Walt
Integrate hashed passwords into the notebook.
r5321
The string should be of the form type:salt:hashed-password.
"""
Satrajit Ghosh
enh: added authentication ability for webapp
r4690 )
Paul Ivanov
added --browser option to notebook...
r6116
Thomas Kluyver
Add ability to open the notebook in a browser when it starts.
r5065 open_browser = Bool(True, config=True,
Paul Ivanov
document how to select browser for notebook
r6115 help="""Whether to open in a browser after starting.
The specific browser used is platform dependent and
determined by the python standard library `webbrowser`
Paul Ivanov
added --browser option to notebook...
r6116 module, unless it is overridden using the --browser
(NotebookApp.browser) configuration option.
Paul Ivanov
document how to select browser for notebook
r6115 """)
Paul Ivanov
added --browser option to notebook...
r6116
browser = Unicode(u'', config=True,
Paul Ivanov
be more explicit about how --browser value is used
r6117 help="""Specify what command to use to invoke a web
browser when opening the notebook. If not specified, the
default browser will be determined by the `webbrowser`
standard library module, which allows setting of the
BROWSER environment variable to override it.
Paul Ivanov
added --browser option to notebook...
r6116 """)
MinRK
Allow notebook server to run in read-only mode...
r5191
Timo Paulssen
this is how the configuration system is supposed to be used.
r5665 webapp_settings = Dict(config=True,
MinRK
rename webapp_settings to tornado_settings...
r17888 help="DEPRECATED, use tornado_settings"
)
def _webapp_settings_changed(self, name, old, new):
self.log.warn("\n webapp_settings is deprecated, use tornado_settings.\n")
self.tornado_settings = new
tornado_settings = Dict(config=True,
Timo Paulssen
this is how the configuration system is supposed to be used.
r5665 help="Supply overrides for the tornado.web.Application that the "
"IPython notebook uses.")
Min RK
add ssl_options config value...
r20529
ssl_options = Dict(config=True,
help="""Supply SSL options for the tornado HTTPServer.
See the tornado docs for details.""")
Matthias BUSSONNIER
Allow to pass option to jinja env...
r15449 jinja_environment_options = Dict(config=True,
help="Supply extra arguments that will be passed to Jinja environment.")
Timo Paulssen
this is how the configuration system is supposed to be used.
r5665
MinRK
allow the notebook to run without MathJax...
r5547 enable_mathjax = Bool(True, config=True,
help="""Whether to enable MathJax for typesetting math/TeX
MathJax is the javascript library IPython uses to render math/LaTeX. It is
very large, so you may want to disable it if you have a slow internet
connection, or for offline use of the notebook.
When disabled, equations etc. will appear as their untransformed TeX source.
"""
)
MinRK
adjust missing mathjax handling per review...
r5557 def _enable_mathjax_changed(self, name, old, new):
"""set mathjax url to empty if mathjax is disabled"""
if not new:
self.mathjax_url = u''
Andrew Straw
let websocket server be traited config option
r6006
MinRK
s/base_project_url/base_url/...
r15238 base_url = Unicode('/', config=True,
Bussonnier Matthias
diverse fixes for project url...
r8938 help='''The base URL for the notebook server.
Leading and trailing slashes can be omitted,
and will automatically be added.
''')
MinRK
s/base_project_url/base_url/...
r15238 def _base_url_changed(self, name, old, new):
Bussonnier Matthias
diverse fixes for project url...
r8938 if not new.startswith('/'):
MinRK
s/base_project_url/base_url/...
r15238 self.base_url = '/'+new
Bussonnier Matthias
diverse fixes for project url...
r8938 elif not new.endswith('/'):
MinRK
s/base_project_url/base_url/...
r15238 self.base_url = new+'/'
base_project_url = Unicode('/', config=True, help="""DEPRECATED use base_url""")
def _base_project_url_changed(self, name, old, new):
self.log.warn("base_project_url is deprecated, use base_url")
self.base_url = new
Bussonnier Matthias
diverse fixes for project url...
r8938
MinRK
use FileFindHandler in NotebookApp...
r7923 extra_static_paths = List(Unicode, config=True,
help="""Extra paths to search for serving static files.
This allows adding javascript/css to be available from the notebook server machine,
or overriding individual files in the IPython"""
)
def _extra_static_paths_default(self):
return [os.path.join(self.profile_dir.location, 'static')]
@property
def static_file_path(self):
"""return extra paths + the default location"""
Thomas Kluyver
Simplify using notebook static files from external code.
r9681 return self.extra_static_paths + [DEFAULT_STATIC_FILES_PATH]
Scott Sanderson
DEV: Support for configurable list of extra jinja template directories.
r18693
extra_template_paths = List(Unicode, config=True,
help="""Extra paths to search for serving jinja templates.
Can be used to override templates from IPython.html.templates."""
)
def _extra_template_paths_default(self):
return []
@property
def template_file_path(self):
Scott Sanderson
DEV: Add IPython.html to the default template path....
r18695 """return extra paths + the default locations"""
return self.extra_template_paths + DEFAULT_TEMPLATE_PATH_LIST
Scott Sanderson
DEV: Support for configurable list of extra jinja template directories.
r18693
Min RK
allow system-wide paths for nbextensions...
r19854 extra_nbextensions_path = List(Unicode, config=True,
help="""extra paths to look for Javascript notebook extensions"""
MinRK
add js_extensions_path...
r12800 )
Min RK
allow system-wide paths for nbextensions...
r19854
@property
def nbextensions_path(self):
"""The path to look for Javascript notebook extensions"""
return self.extra_nbextensions_path + [os.path.join(get_ipython_dir(), 'nbextensions')] + SYSTEM_NBEXTENSIONS_DIRS
Andrew Straw
allow setting base_project_url and base_kernel_url to non-default values
r6004
MinRK
restore websocket_url configurable...
r17303 websocket_url = Unicode("", config=True,
help="""The base URL for websockets,
if it differs from the HTTP server (hint: it almost certainly doesn't).
Should be in the form of an HTTP origin: ws[s]://hostname[:port]
"""
)
MinRK
adjust missing mathjax handling per review...
r5557 mathjax_url = Unicode("", config=True,
help="""The url for MathJax.js."""
)
def _mathjax_url_default(self):
if not self.enable_mathjax:
return u''
MinRK
actually use new tornado_settings...
r17916 static_url_prefix = self.tornado_settings.get("static_url_prefix",
MinRK
s/base_project_url/base_url/...
r15238 url_path_join(self.base_url, "static")
MinRK
fix local mathjax with custom base_project_url...
r11153 )
MinRK
serve local mathjax from nb_extensions
r12810
MinRK
s/nb_extensions/nbextensions
r12811 # try local mathjax, either in nbextensions/mathjax or static/mathjax
MinRK
serve local mathjax from nb_extensions
r12810 for (url_prefix, search_path) in [
MinRK
s/base_project_url/base_url/...
r15238 (url_path_join(self.base_url, "nbextensions"), self.nbextensions_path),
MinRK
serve local mathjax from nb_extensions
r12810 (static_url_prefix, self.static_file_path),
]:
self.log.debug("searching for local mathjax in %s", search_path)
try:
mathjax = filefind(os.path.join('mathjax', 'MathJax.js'), search_path)
except IOError:
continue
MinRK
load mathjax from CDN via https...
r6155 else:
MinRK
serve local mathjax from nb_extensions
r12810 url = url_path_join(url_prefix, u"mathjax/MathJax.js")
self.log.info("Serving local MathJax from %s at %s", mathjax, url)
return url
# no local mathjax, serve from CDN
MinRK
always use HTTPS getting mathjax from CDN
r17539 url = u"https://cdn.mathjax.org/mathjax/latest/MathJax.js"
MinRK
serve local mathjax from nb_extensions
r12810 self.log.info("Using MathJax from CDN: %s", url)
return url
MinRK
adjust missing mathjax handling per review...
r5557
def _mathjax_url_changed(self, name, old, new):
if new and not self.enable_mathjax:
# enable_mathjax=False overrides mathjax_url
self.mathjax_url = u''
else:
self.log.info("Using MathJax: %s", new)
Satrajit Ghosh
enh: added authentication ability for webapp
r4690
Scott Sanderson
MAINT: Use `Type` instead of `DottedObjectName` for managers....
r19636 contents_manager_class = Type(
default_value=FileContentsManager,
klass=ContentsManager,
Brian Granger
Refactoring notebook managers and adding Azure backed storage....
r8180 config=True,
MinRK
make the various manager classes in the notebook app configurable...
r16423 help='The notebook manager class to use.'
)
Scott Sanderson
MAINT: Use `Type` instead of `DottedObjectName` for managers....
r19636 kernel_manager_class = Type(
default_value=MappingKernelManager,
MinRK
make the various manager classes in the notebook app configurable...
r16423 config=True,
help='The kernel manager class to use.'
)
Scott Sanderson
MAINT: Use `Type` instead of `DottedObjectName` for managers....
r19636 session_manager_class = Type(
default_value=SessionManager,
MinRK
make the various manager classes in the notebook app configurable...
r16423 config=True,
help='The session manager class to use.'
)
Scott Sanderson
MAINT: Use `Type` instead of `DottedObjectName` for managers....
r19636 cluster_manager_class = Type(
default_value=ClusterManager,
MinRK
make the various manager classes in the notebook app configurable...
r16423 config=True,
help='The cluster manager class to use.'
)
Brian Granger
Refactoring notebook managers and adding Azure backed storage....
r8180
Scott Sanderson
MAINT: Use `Type` instead of `DottedObjectName` for managers....
r19636 config_manager_class = Type(
default_value=ConfigManager,
Thomas Kluyver
First stab at ConfigManager class
r19083 config = True,
help='The config manager class to use'
)
Sylvain Corlay
allow_none=False by default for Type and Instance
r20940 kernel_spec_manager = Instance(KernelSpecManager, allow_none=True)
Thomas Kluyver
Create REST API for kernel specs
r16684
Scott Sanderson
MAINT: Use `Type` instead of `DottedObjectName` for managers....
r19636 kernel_spec_manager_class = Type(
default_value=KernelSpecManager,
config=True,
help="""
The kernel spec manager class to use. Should be a subclass
of `IPython.kernel.kernelspec.KernelSpecManager`.
Bussonnier Matthias
Make KernelSpecManager configurable...
r19071
Scott Sanderson
MAINT: Use `Type` instead of `DottedObjectName` for managers....
r19636 The Api of KernelSpecManager is provisional and might change
without warning between this version of IPython and the next stable one.
"""
)
Bussonnier Matthias
Make KernelSpecManager configurable...
r19071
Scott Sanderson
DEV: Tweaks to Login/LogoutHandler setup....
r19669 login_handler_class = Type(
Scott Sanderson
MAINT: Use `Type` instead of `DottedObjectName` Log{in,out}Handler.
r19637 default_value=LoginHandler,
Scott Sanderson
DEV: Tweaks to Login/LogoutHandler setup....
r19669 klass=web.RequestHandler,
Phil Elson
Added authentication configuration for the notebook app.
r19322 config=True,
Scott Sanderson
MAINT: Use `Type` instead of `DottedObjectName` Log{in,out}Handler.
r19637 help='The login handler class to use.',
)
Phil Elson
Added authentication configuration for the notebook app.
r19322
Scott Sanderson
DEV: Tweaks to Login/LogoutHandler setup....
r19669 logout_handler_class = Type(
Scott Sanderson
MAINT: Use `Type` instead of `DottedObjectName` Log{in,out}Handler.
r19637 default_value=LogoutHandler,
Scott Sanderson
DEV: Tweaks to Login/LogoutHandler setup....
r19669 klass=web.RequestHandler,
Min RK
make logout_handler overridable
r19326 config=True,
Scott Sanderson
MAINT: Use `Type` instead of `DottedObjectName` Log{in,out}Handler.
r19637 help='The logout handler class to use.',
)
Min RK
make logout_handler overridable
r19326
Alberto Valverde
Added trust_xheaders config option to delegate it to HTTPServer....
r10163 trust_xheaders = Bool(False, config=True,
help=("Whether to trust or not X-Scheme/X-Forwarded-Proto and X-Real-Ip/X-Forwarded-For headers"
MinRK
warn when notebook is started in pylab mode...
r14108 "sent by the upstream reverse proxy. Necessary if the proxy handles SSL")
Alberto Valverde
Added trust_xheaders config option to delegate it to HTTPServer....
r10163 )
Bussonnier Matthias
Make KernelSpecManager configurable...
r19071
Thomas Kluyver
Write notebook server info file in security directory
r14063 info_file = Unicode()
def _info_file_default(self):
info_file = "nbserver-%s.json"%os.getpid()
return os.path.join(self.profile_dir.security_dir, info_file)
MinRK
reorganize who knows what about paths...
r15420
MinRK
informative warning on `ipython notebook --pylab`...
r16375 pylab = Unicode('disabled', config=True,
help="""
DISABLED: use %pylab or %matplotlib in the notebook to enable matplotlib.
"""
)
def _pylab_changed(self, name, old, new):
MinRK
refuse to start if `--pylab` is given
r16380 """when --pylab is specified, display a warning and exit"""
MinRK
informative warning on `ipython notebook --pylab`...
r16375 if new != 'warn':
backend = ' %s' % new
else:
backend = ''
MinRK
refuse to start if `--pylab` is given
r16380 self.log.error("Support for specifying --pylab on the command line has been removed.")
self.log.error(
MinRK
informative warning on `ipython notebook --pylab`...
r16375 "Please use `%pylab{0}` or `%matplotlib{0}` in the notebook itself.".format(backend)
)
MinRK
refuse to start if `--pylab` is given
r16380 self.exit(1)
MinRK
reorganize who knows what about paths...
r15420
Thomas Kluyver
Allow starting the server with both file_to_run and notebook_dir...
r18970 notebook_dir = Unicode(config=True,
help="The directory to use for notebooks and kernels."
)
def _notebook_dir_default(self):
if self.file_to_run:
return os.path.dirname(os.path.abspath(self.file_to_run))
else:
return py3compat.getcwd()
MinRK
reorganize who knows what about paths...
r15420 def _notebook_dir_changed(self, name, old, new):
"""Do a bit of validation of the notebook dir."""
if not os.path.isabs(new):
# If we receive a non-absolute path, make it absolute.
self.notebook_dir = os.path.abspath(new)
return
MinRK
don't create notebook_dir if it doesn't exist
r15423 if not os.path.isdir(new):
raise TraitError("No such notebook dir: %r" % new)
MinRK
reorganize who knows what about paths...
r15420
MinRK
use config instead of App.instance to propagate notebook_dir...
r15422 # setting App.notebook_dir implies setting notebook and kernel dirs as well
MinRK
rename notebooks service to contents service...
r17524 self.config.FileContentsManager.root_dir = new
MinRK
use config instead of App.instance to propagate notebook_dir...
r15422 self.config.MappingKernelManager.root_dir = new
Thomas Kluyver
Write notebook server info file in security directory
r14063
Thomas Kluyver
Rename extensions -> server_extensions
r19457 server_extensions = List(Unicode(), config=True,
Thomas Kluyver
Note that extension API is experimental
r19458 help=("Python modules to load as notebook server extensions. "
"This is an experimental API, and may change in future releases.")
Thomas Kluyver
Add support for notebook server extensions...
r19456 )
Scott Sanderson
DEV: Add re-raise toggle for server extensions....
r20643 reraise_server_extension_failures = Bool(
False,
config=True,
help="Reraise exceptions encountered loading server extensions?",
)
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344 def parse_command_line(self, argv=None):
Brian E. Granger
Misc changes to the notebook....
r5104 super(NotebookApp, self).parse_command_line(argv)
MinRK
pass profile-dir instead of profile to Kernel...
r12284
Puneeth Chaganti
ENH: Open a notebook from the command line...
r6724 if self.extra_args:
MinRK
don't relay notebook dir to kernel from command-line
r13158 arg0 = self.extra_args[0]
f = os.path.abspath(arg0)
self.argv.remove(arg0)
MinRK
fix initial-file opening in the notebook
r13118 if not os.path.exists(f):
self.log.critical("No such file or directory: %s", f)
self.exit(1)
MinRK
write config instead of direct assignment from the command-line...
r15461
# Use config here, to ensure that it takes higher priority than
# anything that comes from the profile.
Thomas Kluyver
Fix starting notebook server with file/directory at command line....
r16041 c = Config()
MinRK
minor notebook-dir config adjustments...
r7556 if os.path.isdir(f):
Thomas Kluyver
Fix starting notebook server with file/directory at command line....
r16041 c.NotebookApp.notebook_dir = f
Zachary Sailer
entry from command line to notebook
r13019 elif os.path.isfile(f):
Thomas Kluyver
Fix starting notebook server with file/directory at command line....
r16041 c.NotebookApp.file_to_run = f
self.update_config(c)
Puneeth Chaganti
ENH: Open a notebook from the command line...
r6724
Brian E. Granger
Adding kernel/notebook associations.
r4494 def init_configurables(self):
Scott Sanderson
MAINT: Use `Type` instead of `DottedObjectName` for managers....
r19636 self.kernel_spec_manager = self.kernel_spec_manager_class(
Min RK
Add KernelSpecManager.whitelist...
r20316 parent=self,
Scott Sanderson
MAINT: Use `Type` instead of `DottedObjectName` for managers....
r19636 ipython_dir=self.ipython_dir,
)
self.kernel_manager = self.kernel_manager_class(
parent=self,
log=self.log,
connection_dir=self.profile_dir.security_dir,
)
self.contents_manager = self.contents_manager_class(
parent=self,
log=self.log,
)
self.session_manager = self.session_manager_class(
parent=self,
log=self.log,
kernel_manager=self.kernel_manager,
contents_manager=self.contents_manager,
)
self.cluster_manager = self.cluster_manager_class(
parent=self,
log=self.log,
Brian E. Granger
Adding kernel/notebook associations.
r4494 )
Scott Sanderson
MAINT: Use `Type` instead of `DottedObjectName` Log{in,out}Handler.
r19637
Scott Sanderson
MAINT: Use `Type` instead of `DottedObjectName` for managers....
r19636 self.config_manager = self.config_manager_class(
parent=self,
log=self.log,
profile_dir=self.profile_dir.location,
)
Thomas Kluyver
First stab at ConfigManager class
r19083
Brian E. Granger
Notebook app debugging....
r4345 def init_logging(self):
# 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
MinRK
hook up tornado 3's loggers to our handlers
r10358
MinRK
use app name on tornado log statements...
r18117 for log in app_log, access_log, gen_log:
# consistent log output name (NotebookApp instead of tornado.access, etc.)
log.name = self.log.name
MinRK
hook up tornado 3's loggers to our handlers
r10358 # hook up tornado 3's loggers to our app handlers
MinRK
use tornado logging in NotebookApp...
r16358 logger = logging.getLogger('tornado')
logger.propagate = True
logger.parent = self.log
logger.setLevel(self.log.level)
MinRK
cleanup connection files on notebook shutdown...
r5799
def init_webapp(self):
"""initialize tornado webapp and httpserver"""
MinRK
actually use new tornado_settings...
r17916 self.tornado_settings['allow_origin'] = self.allow_origin
MinRK
only set allow_origin_pat if defined...
r17184 if self.allow_origin_pat:
MinRK
actually use new tornado_settings...
r17916 self.tornado_settings['allow_origin_pat'] = re.compile(self.allow_origin_pat)
self.tornado_settings['allow_credentials'] = self.allow_credentials
Min RK
ensure default_url includes base_url
r20212 # ensure default_url starts with base_url
if not self.default_url.startswith(self.base_url):
self.default_url = url_path_join(self.base_url, self.default_url)
MinRK
make CORS configurable...
r17106
Brian E. Granger
More work on updating the notebook zmq forwarding.
r4347 self.web_app = NotebookWebApplication(
MinRK
rename notebooks service to contents service...
r17524 self, self.kernel_manager, self.contents_manager,
Thomas Kluyver
Create REST API for kernel specs
r16684 self.cluster_manager, self.session_manager, self.kernel_spec_manager,
Thomas Kluyver
First stab at ConfigManager class
r19083 self.config_manager,
MinRK
actually use new tornado_settings...
r17916 self.log, self.base_url, self.default_url, self.tornado_settings,
Matthias BUSSONNIER
Allow to pass option to jinja env...
r15449 self.jinja_environment_options
Brian E. Granger
More work on updating the notebook zmq forwarding.
r4347 )
Min RK
add ssl_options config value...
r20529 ssl_options = self.ssl_options
Brian E. Granger
Updating notebook configuration....
r4519 if self.certfile:
Min RK
add ssl_options config value...
r20529 ssl_options['certfile'] = self.certfile
if self.keyfile:
ssl_options['keyfile'] = self.keyfile
if not ssl_options:
# None indicates no SSL config
Brian E. Granger
Updating notebook configuration....
r4519 ssl_options = None
Min RK
address review in custom auth
r19333 self.login_handler_class.validate_security(self, ssl_options=ssl_options)
Alberto Valverde
Added trust_xheaders config option to delegate it to HTTPServer....
r10163 self.http_server = httpserver.HTTPServer(self.web_app, ssl_options=ssl_options,
xheaders=self.trust_xheaders)
Phil Elson
Added authentication configuration for the notebook app.
r19322
Bradley M. Froehle
NotebookApp: Make the number of ports to retry user configurable....
r7234 success = None
for port in random_ports(self.port, self.port_retries+1):
Brian E. Granger
Autotry additional ports if 8888 if already in use.
r4548 try:
self.http_server.listen(port, self.ip)
Matthias BUSSONNIER
conform to pep 3110...
r7787 except socket.error as e:
MinRK
catch EACCES when binding notebook app...
r12845 if e.errno == errno.EADDRINUSE:
self.log.info('The port %i is already in use, trying another random port.' % port)
continue
elif e.errno in (errno.EACCES, getattr(errno, 'WSAEACCES', errno.EACCES)):
self.log.warn("Permission to listen on port %i denied" % port)
continue
else:
Brian E. Granger
Autotry additional ports if 8888 if already in use.
r4548 raise
else:
self.port = port
Bradley M. Froehle
NotebookApp: Make the number of ports to retry user configurable....
r7234 success = True
Brian E. Granger
Autotry additional ports if 8888 if already in use.
r4548 break
Bradley M. Froehle
NotebookApp: Make the number of ports to retry user configurable....
r7234 if not success:
self.log.critical('ERROR: the notebook server could not be started because '
'no available port could be found.')
Bradley M. Froehle
exit if server cannot start (instead of ugly traceback)
r7240 self.exit(1)
MinRK
cleanup connection files on notebook shutdown...
r5799
Thomas Kluyver
Write notebook server info file in security directory
r14063 @property
def display_url(self):
ip = self.ip if self.ip else '[all ip addresses on your system]'
return self._url(ip)
@property
def connection_url(self):
MinRK
use 'localhost' as default for the notebook server...
r16334 ip = self.ip if self.ip else 'localhost'
Thomas Kluyver
Write notebook server info file in security directory
r14063 return self._url(ip)
def _url(self, ip):
proto = 'https' if self.certfile else 'http'
MinRK
s/base_project_url/base_url/...
r15238 return "%s://%s:%i%s" % (proto, ip, self.port, self.base_url)
Thomas Kluyver
Write notebook server info file in security directory
r14063
Thomas Kluyver
Multiple terminals and conditional initialisation
r18482 def init_terminals(self):
try:
from .terminal import initialize
initialize(self.web_app)
Thomas Kluyver
Only display terminals in dashboard if terminals are available
r18557 self.web_app.settings['terminals_available'] = True
Thomas Kluyver
Multiple terminals and conditional initialisation
r18482 except ImportError as e:
Min RK
promote "no terminals" message to warn...
r19981 log = self.log.debug if sys.platform == 'win32' else self.log.warn
log("Terminals not available (error was %s)", e)
Thomas Kluyver
Multiple terminals and conditional initialisation
r18482
MinRK
exit notebook cleanly on SIGINT, SIGTERM...
r6498 def init_signal(self):
MinRK
remove workarounds for no-longer-supported pyzmq versions
r10200 if not sys.platform.startswith('win'):
MinRK
handle old pyzmq in notebook exit confirmation...
r6509 signal.signal(signal.SIGINT, self._handle_sigint)
MinRK
confirm notebook shutdown on SIGINT...
r6508 signal.signal(signal.SIGTERM, self._signal_stop)
Paul Ivanov
check for SIGUSR1 before using it, closes #3074...
r10031 if hasattr(signal, 'SIGUSR1'):
# Windows doesn't support SIGUSR1
signal.signal(signal.SIGUSR1, self._signal_info)
Paul Ivanov
make SIGUSR1 and SIGINFO trigger printing of info...
r9913 if hasattr(signal, 'SIGINFO'):
# only on BSD-based systems
signal.signal(signal.SIGINFO, self._signal_info)
MinRK
exit notebook cleanly on SIGINT, SIGTERM...
r6498
MinRK
confirm notebook shutdown on SIGINT...
r6508 def _handle_sigint(self, sig, frame):
"""SIGINT handler spawns confirmation dialog"""
# register more forceful signal handler for ^C^C case
signal.signal(signal.SIGINT, self._signal_stop)
# request confirmation dialog in bg thread, to avoid
# blocking the App
thread = threading.Thread(target=self._confirm_exit)
thread.daemon = True
thread.start()
def _restore_sigint_handler(self):
"""callback for restoring original SIGINT handler"""
signal.signal(signal.SIGINT, self._handle_sigint)
def _confirm_exit(self):
"""confirm shutdown on ^C
A second ^C, or answering 'y' within 5s will cause shutdown,
otherwise original SIGINT handler will be restored.
MinRK
disable ^C^C confirmation on Windows
r7689
This doesn't work on Windows.
MinRK
confirm notebook shutdown on SIGINT...
r6508 """
Paul Ivanov
log the notebook server directory...
r9912 info = self.log.info
info('interrupted')
Thomas Kluyver
Convert print statements to print function calls...
r13348 print(self.notebook_info())
Paul Ivanov
print info string on interrupt, log it on startup
r10019 sys.stdout.write("Shutdown this notebook server (y/[n])? ")
MinRK
confirm notebook shutdown on SIGINT...
r6508 sys.stdout.flush()
r,w,x = select.select([sys.stdin], [], [], 5)
if r:
line = sys.stdin.readline()
Renaud Richardet
do not shutdown notebook if 'n' is part of answer...
r16211 if line.lower().startswith('y') and 'n' not in line.lower():
MinRK
confirm notebook shutdown on SIGINT...
r6508 self.log.critical("Shutdown confirmed")
MinRK
use IOLoop.current in a few places...
r19347 ioloop.IOLoop.current().stop()
MinRK
confirm notebook shutdown on SIGINT...
r6508 return
else:
Thomas Kluyver
Convert print statements to print function calls...
r13348 print("No answer for 5s:", end=' ')
print("resuming operation...")
MinRK
confirm notebook shutdown on SIGINT...
r6508 # no answer, or answer is no:
# set it back to original SIGINT handler
# use IOLoop.add_callback because signal.signal must be called
# from main thread
MinRK
use IOLoop.current in a few places...
r19347 ioloop.IOLoop.current().add_callback(self._restore_sigint_handler)
MinRK
confirm notebook shutdown on SIGINT...
r6508
def _signal_stop(self, sig, frame):
MinRK
exit notebook cleanly on SIGINT, SIGTERM...
r6498 self.log.critical("received signal %s, stopping", sig)
MinRK
use IOLoop.current in a few places...
r19347 ioloop.IOLoop.current().stop()
Paul Ivanov
make SIGUSR1 and SIGINFO trigger printing of info...
r9913
def _signal_info(self, sig, frame):
Thomas Kluyver
Convert print statements to print function calls...
r13348 print(self.notebook_info())
MinRK
exit notebook cleanly on SIGINT, SIGTERM...
r6498
MinRK
check submodules when starting the notebook server...
r10557 def init_components(self):
"""Check the components submodule, and warn if it's unclean"""
status = submodule.check_submodule_status()
if status == 'missing':
self.log.warn("components submodule missing, running `git submodule update`")
submodule.update_submodules(submodule.ipython_parent())
elif status == 'unclean':
self.log.warn("components submodule unclean, you may see 404s on static/components")
self.log.warn("run `setup.py submodule` or `git submodule update` to update")
Thomas Kluyver
Add support for notebook server extensions...
r19456
Thomas Kluyver
Rename extensions -> server_extensions
r19457 def init_server_extensions(self):
Thomas Kluyver
Add support for notebook server extensions...
r19456 """Load any extensions specified by config.
Import the module, then call the load_jupyter_server_extension function,
if one exists.
Thomas Kluyver
Note that extension API is experimental
r19458
The extension API is experimental, and may change in future releases.
Thomas Kluyver
Add support for notebook server extensions...
r19456 """
Thomas Kluyver
Rename extensions -> server_extensions
r19457 for modulename in self.server_extensions:
Thomas Kluyver
Add support for notebook server extensions...
r19456 try:
mod = importlib.import_module(modulename)
func = getattr(mod, 'load_jupyter_server_extension', None)
if func is not None:
func(self)
except Exception:
Scott Sanderson
DEV: Add re-raise toggle for server extensions....
r20643 if self.reraise_server_extension_failures:
raise
Thomas Kluyver
Add support for notebook server extensions...
r19456 self.log.warn("Error loading server extension %s", modulename,
exc_info=True)
MinRK
check submodules when starting the notebook server...
r10557
MinRK
cleanup connection files on notebook shutdown...
r5799 @catch_config_error
def initialize(self, argv=None):
super(NotebookApp, self).initialize(argv)
MinRK
fix tornado log propagation...
r13307 self.init_logging()
MinRK
cleanup connection files on notebook shutdown...
r5799 self.init_configurables()
MinRK
check submodules when starting the notebook server...
r10557 self.init_components()
MinRK
cleanup connection files on notebook shutdown...
r5799 self.init_webapp()
Thomas Kluyver
Multiple terminals and conditional initialisation
r18482 self.init_terminals()
MinRK
exit notebook cleanly on SIGINT, SIGTERM...
r6498 self.init_signal()
Thomas Kluyver
Rename extensions -> server_extensions
r19457 self.init_server_extensions()
MinRK
cleanup connection files on notebook shutdown...
r5799
def cleanup_kernels(self):
Brian E. Granger
General cleanup of kernelmanger.MultiKernelManager.
r9112 """Shutdown all kernels.
MinRK
cleanup connection files on notebook shutdown...
r5799
The kernels will shutdown themselves when this process no longer exists,
but explicit shutdown allows the KernelManagers to cleanup the connection files.
"""
self.log.info('Shutting down kernels')
Brian E. Granger
General cleanup of kernelmanger.MultiKernelManager.
r9112 self.kernel_manager.shutdown_all()
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344
Paul Ivanov
print info string on interrupt, log it on startup
r10019 def notebook_info(self):
"Return the current working directory and the server url information"
MinRK
rename notebooks service to contents service...
r17524 info = self.contents_manager.info_string() + "\n"
Paul Ivanov
include the # of active kernels in server info
r13261 info += "%d active kernels \n" % len(self.kernel_manager._kernels)
Thomas Kluyver
Write notebook server info file in security directory
r14063 return info + "The IPython Notebook is running at: %s" % self.display_url
def server_info(self):
"""Return a JSONable dict of information about this server."""
return {'url': self.connection_url,
'hostname': self.ip if self.ip else 'localhost',
'port': self.port,
'secure': bool(self.certfile),
MinRK
s/base_project_url/base_url/...
r15238 'base_url': self.base_url,
MinRK
reorganize who knows what about paths...
r15420 'notebook_dir': os.path.abspath(self.notebook_dir),
Thomas Kluyver
Check for pids when listing nbserver processes
r17181 'pid': os.getpid()
Thomas Kluyver
Write notebook server info file in security directory
r14063 }
def write_server_info_file(self):
"""Write the result of server_info() to the JSON file info_file."""
Thomas Kluyver
Fix writing server info files on Python 2
r14079 with open(self.info_file, 'w') as f:
json.dump(self.server_info(), f, indent=2)
Thomas Kluyver
Write notebook server info file in security directory
r14063
def remove_server_info_file(self):
"""Remove the nbserver-<pid>.json file created for this server.
Ignores the error raised when the file has already been removed.
"""
try:
os.unlink(self.info_file)
except OSError as e:
if e.errno != errno.ENOENT:
raise
Paul Ivanov
log the notebook server directory...
r9912
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344 def start(self):
MinRK
hook up tornado 3's loggers to our handlers
r10358 """ Start the IPython Notebook server app, after initialization
Paul Ivanov
on resume, print server info again...
r9910
This method takes no arguments so all configuration and initialization
must be done prior to calling this method."""
Thomas Kluyver
Command line entry point to list running notebook servers
r14177 if self.subapp is not None:
return self.subapp.start()
Fernando Perez
Add message about how to stop the notebook.
r5786 info = self.log.info
Paul Ivanov
print info string on interrupt, log it on startup
r10019 for line in self.notebook_info().split("\n"):
info(line)
MinRK
mention double-control-C to stop notebook server...
r11228 info("Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).")
Fernando Perez
Add message about how to stop the notebook.
r5786
Thomas Kluyver
Write notebook server info file in security directory
r14063 self.write_server_info_file()
MinRK
minor notebook-dir config adjustments...
r7556 if self.open_browser or self.file_to_run:
Bradley M. Froehle
notebook: Print a warning (but do not abort) if no webbrowser can be found....
r7658 try:
browser = webbrowser.get(self.browser or None)
except webbrowser.Error as e:
self.log.warn('No web browser found: %s.' % e)
browser = None
MinRK
fix initial-file opening in the notebook
r13118
MinRK
fixup positional arg parsing in notebook app...
r15460 if self.file_to_run:
Thomas Kluyver
Allow starting the server with both file_to_run and notebook_dir...
r18970 if not os.path.exists(self.file_to_run):
self.log.critical("%s does not exist" % self.file_to_run)
MinRK
fixup positional arg parsing in notebook app...
r15460 self.exit(1)
Thomas Kluyver
Allow starting the server with both file_to_run and notebook_dir...
r18970
relpath = os.path.relpath(self.file_to_run, self.notebook_dir)
uri = url_path_join('notebooks', *relpath.split(os.sep))
Puneeth Chaganti
ENH: Open a notebook from the command line...
r6724 else:
MinRK
fixup positional arg parsing in notebook app...
r15460 uri = 'tree'
Bradley M. Froehle
notebook: Print a warning (but do not abort) if no webbrowser can be found....
r7658 if browser:
MinRK
fixup positional arg parsing in notebook app...
r15460 b = lambda : browser.open(url_path_join(self.connection_url, uri),
Thomas Kluyver
Write notebook server info file in security directory
r14063 new=2)
Bradley M. Froehle
notebook: Print a warning (but do not abort) if no webbrowser can be found....
r7658 threading.Thread(target=b).start()
MinRK
use IOLoop.current in a few places...
r19347
self.io_loop = ioloop.IOLoop.current()
Min RK
add no-op every 5s on Windows...
r20401 if sys.platform.startswith('win'):
# add no-op to wake every 5s
# to handle signals that may be ignored by the inner loop
pc = ioloop.PeriodicCallback(lambda : None, 5000)
pc.start()
MinRK
cleanup connection files on notebook shutdown...
r5799 try:
MinRK
use IOLoop.current in a few places...
r19347 self.io_loop.start()
MinRK
cleanup connection files on notebook shutdown...
r5799 except KeyboardInterrupt:
info("Interrupted...")
finally:
self.cleanup_kernels()
Thomas Kluyver
Write notebook server info file in security directory
r14063 self.remove_server_info_file()
MinRK
use IOLoop.current in a few places...
r19347
def stop(self):
def _stop():
self.http_server.stop()
self.io_loop.stop()
self.io_loop.add_callback(_stop)
Thomas Kluyver
Write notebook server info file in security directory
r14063
Thomas Kluyver
Command line entry point to list running notebook servers
r14177 def list_running_servers(profile='default'):
Thomas Kluyver
Write notebook server info file in security directory
r14063 """Iterate over the server info files of running notebook servers.
MinRK
cleanup connection files on notebook shutdown...
r5799
Thomas Kluyver
Write notebook server info file in security directory
r14063 Given a profile name, find nbserver-* files in the security directory of
that profile, and yield dicts of their information, each one pertaining to
a currently running notebook server instance.
"""
pd = ProfileDir.find_profile_dir_by_name(get_ipython_dir(), name=profile)
for file in os.listdir(pd.security_dir):
if file.startswith('nbserver-'):
with io.open(os.path.join(pd.security_dir, file), encoding='utf-8') as f:
Thomas Kluyver
Check for pids when listing nbserver processes
r17181 info = json.load(f)
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344
Thomas Kluyver
Check for pids when listing nbserver processes
r17181 # Simple check whether that process is really still running
Thomas Kluyver
Handle nbserver info files without pid, from IPython 2.x...
r19296 # Also remove leftover files from IPython 2.x without a pid field
if ('pid' in info) and check_pid(info['pid']):
Thomas Kluyver
Check for pids when listing nbserver processes
r17181 yield info
else:
# If the process has died, try to delete its info file
try:
os.unlink(file)
except OSError:
pass # TODO: This should warn or log or something
Brian E. Granger
Refactoring the notebook app to support the new config system.
r4344 #-----------------------------------------------------------------------------
# Main entry point
#-----------------------------------------------------------------------------
Brian E. Granger
Creating files to new notebook app.
r4339
MinRK
Application.launch_instance...
r11176 launch_new_instance = NotebookApp.launch_instance
Brian E. Granger
Creating files to new notebook app.
r4339