use FileFindHandler in NotebookApp

adds NotebookApp.extra_static_paths configurable for extending the search path.

The default is to include profile/static.
This commit is contained in:
MinRK 2012-07-20 12:01:49 -05:00
parent a627f3d955
commit 96158cff3f

View File

@ -48,7 +48,8 @@ from .handlers import (LoginHandler, LogoutHandler,
MainKernelHandler, KernelHandler, KernelActionHandler, IOPubHandler,
ShellHandler, NotebookRootHandler, NotebookHandler, NotebookCopyHandler,
RSTHandler, AuthenticatedFileHandler, PrintNotebookHandler,
MainClusterHandler, ClusterProfileHandler, ClusterActionHandler
MainClusterHandler, ClusterProfileHandler, ClusterActionHandler,
FileFindHandler,
)
from .notebookmanager import NotebookManager
from .clustermanager import ClusterManager
@ -67,6 +68,7 @@ from IPython.zmq.ipkernel import (
)
from IPython.utils.traitlets import Dict, Unicode, Integer, List, Enum, Bool
from IPython.utils import py3compat
from IPython.utils.path import filefind
#-----------------------------------------------------------------------------
# Module globals
@ -154,6 +156,7 @@ class NotebookWebApplication(web.Application):
settings = dict(
template_path=os.path.join(os.path.dirname(__file__), "templates"),
static_path=os.path.join(os.path.dirname(__file__), "static"),
static_handler_class = FileFindHandler,
cookie_secret=os.urandom(1024),
login_url="%s/login"%(base_project_url.rstrip('/')),
)
@ -355,6 +358,20 @@ class NotebookApp(BaseIPythonApplication):
websocket_host = Unicode("", config=True,
help="""The hostname for the websocket server."""
)
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"""
return self.extra_static_paths + [os.path.join(os.path.dirname(__file__), "static")]
mathjax_url = Unicode("", config=True,
help="""The url for MathJax.js."""
@ -362,13 +379,11 @@ class NotebookApp(BaseIPythonApplication):
def _mathjax_url_default(self):
if not self.enable_mathjax:
return u''
static_path = self.webapp_settings.get("static_path", os.path.join(os.path.dirname(__file__), "static"))
static_url_prefix = self.webapp_settings.get("static_url_prefix",
"/static/")
if os.path.exists(os.path.join(static_path, 'mathjax', "MathJax.js")):
self.log.info("Using local MathJax")
return static_url_prefix+u"mathjax/MathJax.js"
else:
try:
filefind(os.path.join('mathjax', 'MathJax.js'), self.static_file_path)
except IOError:
if self.certfile:
# HTTPS: load from Rackspace CDN, because SSL certificate requires it
base = u"https://c328740.ssl.cf1.rackcdn.com"
@ -378,6 +393,9 @@ class NotebookApp(BaseIPythonApplication):
url = base + u"/mathjax/latest/MathJax.js"
self.log.info("Using MathJax from CDN: %s", url)
return url
else:
self.log.info("Using local MathJax")
return static_url_prefix+u"mathjax/MathJax.js"
def _mathjax_url_changed(self, name, old, new):
if new and not self.enable_mathjax: