##// END OF EJS Templates
Merge pull request #2479 from minrk/winapi...
Merge pull request #2479 from minrk/winapi Use new _winapi instead of removed _subprocess New in Python 3.3, c.f. http://bugs.python.org/issue11750 Maintain existing support by falling back on _subprocess if _winapi cannot be imported.

File last commit:

r7948:f374909a
r8558:1b1fccce merge
Show More
mathjax.py
93 lines | 3.1 KiB | text/x-python | PythonLexer
"""Utility function for installing MathJax javascript library into
the notebook's 'static' directory, for offline use.
Authors:
* Min RK
"""
#-----------------------------------------------------------------------------
# Copyright (C) 2008-2011 The IPython Development Team
#
# Distributed under the terms of the BSD License. The full license is in
# the file COPYING, distributed as part of this software.
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
import os
import shutil
import urllib2
import tempfile
import tarfile
from IPython.utils.path import locate_profile
#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
def install_mathjax(tag='v2.0', replace=False, dest=None):
"""Download and install MathJax for offline use.
You can use this to install mathjax to a location on your static file
path. This includes the `static` directory within your IPython profile,
which is the default location for this install.
MathJax is a ~15MB download, and ~150MB installed.
Parameters
----------
replace : bool [False]
Whether to remove and replace an existing install.
tag : str ['v2.0']
Which tag to download. Default is 'v2.0', the current stable release,
but alternatives include 'v1.1' and 'master'.
dest : path
The path to the directory in which mathjax will be installed.
The default is `IPYTHONDIR/profile_default/static`.
dest must be on your notebook static_path when you run the notebook server.
The default location works for this.
"""
mathjax_url = "https://github.com/mathjax/MathJax/tarball/%s" % tag
if dest is None:
dest = os.path.join(locate_profile('default'), 'static')
if not os.path.exists(dest):
os.mkdir(dest)
static = dest
dest = os.path.join(static, 'mathjax')
# check for existence and permissions
if not os.access(static, os.W_OK):
raise IOError("Need have write access to %s" % static)
if os.path.exists(dest):
if replace:
if not os.access(dest, os.W_OK):
raise IOError("Need have write access to %s" % dest)
print "removing previous MathJax install"
shutil.rmtree(dest)
else:
print "offline MathJax apparently already installed"
return
# download mathjax
print "Downloading mathjax source from %s ..." % mathjax_url
response = urllib2.urlopen(mathjax_url)
print "done"
# use 'r|gz' stream mode, because socket file-like objects can't seek:
tar = tarfile.open(fileobj=response.fp, mode='r|gz')
topdir = tar.firstmember.path
print "Extracting to %s" % dest
tar.extractall(static)
# it will be mathjax-MathJax-<sha>, rename to just mathjax
os.rename(os.path.join(static, topdir), dest)
__all__ = ['install_mathjax']