##// END OF EJS Templates
Fix %bookmark -l for Python 3...
Fix %bookmark -l for Python 3 Closes gh-5676 Also add a simple test for %bookmark

File last commit:

r13640:18bbdacf
r16369:eef061e7
Show More
mathjax.py
238 lines | 7.0 KiB | text/x-python | PythonLexer
Matthias BUSSONNIER
use argparse to make most of the parameters configurable
r8682 #!/usr/bin/python
MinRK
Add utility function for installing mathjax for offline use...
r4652 """Utility function for installing MathJax javascript library into
MinRK
s/nb_extensions/nbextensions
r12811 your IPython nbextensions directory, for offline use.
MinRK
Add utility function for installing mathjax for offline use...
r4652
Matthias BUSSONNIER
a few fixes...
r8507 Authors:
* Min RK
* Mark Sienkiewicz
* Matthias Bussonnier
Mark Sienkiewicz at STScI
mods to install mathjax from an explicitly downloaded tar or zip file
r8154 To download and install MathJax:
From Python:
>>> from IPython.external.mathjax import install_mathjax
>>> install_mathjax()
From the command line:
$ python -m IPython.external.mathjax
MinRK
install offline mathjax to nb_extensions instead of profile
r12809 To a specific location:
Kyle Kelley
Made profile the default install option, install_dir the explicit
r12292
MinRK
alternate interpretation of mathjax install dir...
r12812 $ python -m IPython.external.mathjax -i /usr/share/
will install mathjax to /usr/share/mathjax
Kyle Kelley
Made profile the default install option, install_dir the explicit
r12292
Mark Sienkiewicz at STScI
mods to install mathjax from an explicitly downloaded tar or zip file
r8154 To install MathJax from a file you have already downloaded:
$ python -m IPython.external.mathjax mathjax-xxx.tar.gz
$ python -m IPython.external.mathjax mathjax-xxx.zip
It will not install MathJax if it is already there. Use -r to
replace the existing copy of MathJax.
To find the directory where IPython would like MathJax installed:
$ python -m IPython.external.mathjax -d
MinRK
Add utility function for installing mathjax for offline use...
r4652
"""
Thomas Kluyver
Convert print statements to print function calls...
r13348 from __future__ import print_function
MinRK
Add utility function for installing mathjax for offline use...
r4652
Matthias BUSSONNIER
use argparse to make most of the parameters configurable
r8682
MinRK
Add utility function for installing mathjax for offline use...
r4652 #-----------------------------------------------------------------------------
MinRK
alternate interpretation of mathjax install dir...
r12812 # Copyright (C) 2011 The IPython Development Team
MinRK
Add utility function for installing mathjax for offline use...
r4652 #
# Distributed under the terms of the BSD License. The full license is in
# the file COPYING, distributed as part of this software.
#-----------------------------------------------------------------------------
Mark Sienkiewicz at STScI
mods to install mathjax from an explicitly downloaded tar or zip file
r8154
MinRK
Add utility function for installing mathjax for offline use...
r4652 #-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
Thomas Kluyver
Import argparse directly from stdlib
r12547 import argparse
MinRK
Add utility function for installing mathjax for offline use...
r4652 import os
import shutil
Mark Sienkiewicz at STScI
mods to install mathjax from an explicitly downloaded tar or zip file
r8154 import sys
MinRK
Add utility function for installing mathjax for offline use...
r4652 import tarfile
Mark Sienkiewicz at STScI
mods to install mathjax from an explicitly downloaded tar or zip file
r8154 import zipfile
MinRK
Add utility function for installing mathjax for offline use...
r4652
MinRK
install offline mathjax to nb_extensions instead of profile
r12809 from IPython.utils.path import get_ipython_dir
Matthias BUSSONNIER
use argparse to make most of the parameters configurable
r8682
Sean Vig
Fix Python 3 handling of urllib...
r13640 try:
from urllib.request import urlopen # Py 3
except ImportError:
from urllib2 import urlopen
MinRK
Add utility function for installing mathjax for offline use...
r4652 #-----------------------------------------------------------------------------
Mark Sienkiewicz at STScI
mods to install mathjax from an explicitly downloaded tar or zip file
r8154 #
MinRK
Add utility function for installing mathjax for offline use...
r4652 #-----------------------------------------------------------------------------
MinRK
install offline mathjax to nb_extensions instead of profile
r12809 # Where mathjax will be installed
Mark Sienkiewicz at STScI
mods to install mathjax from an explicitly downloaded tar or zip file
r8154
MinRK
alternate interpretation of mathjax install dir...
r12812 nbextensions = os.path.join(get_ipython_dir(), 'nbextensions')
default_dest = os.path.join(nbextensions, 'mathjax')
Mark Sienkiewicz at STScI
mods to install mathjax from an explicitly downloaded tar or zip file
r8154
MinRK
install offline mathjax to nb_extensions instead of profile
r12809 # Test for access to install mathjax
Mark Sienkiewicz at STScI
mods to install mathjax from an explicitly downloaded tar or zip file
r8154
MinRK
install offline mathjax to nb_extensions instead of profile
r12809 def prepare_dest(dest, replace=False):
"""prepare the destination folder for mathjax install
Returns False if mathjax appears to already be installed and there is nothing to do,
True otherwise.
"""
Matthias BUSSONNIER
use argparse to make most of the parameters configurable
r8682 parent = os.path.abspath(os.path.join(dest, os.path.pardir))
MinRK
install offline mathjax to nb_extensions instead of profile
r12809 if not os.path.exists(parent):
os.makedirs(parent)
MinRK
alternate interpretation of mathjax install dir...
r12812
MinRK
Add utility function for installing mathjax for offline use...
r4652 if os.path.exists(dest):
if replace:
Thomas Kluyver
Convert print statements to print function calls...
r13348 print("removing existing MathJax at %s" % dest)
MinRK
Add utility function for installing mathjax for offline use...
r4652 shutil.rmtree(dest)
Mark Sienkiewicz at STScI
mods to install mathjax from an explicitly downloaded tar or zip file
r8154 return True
MinRK
Add utility function for installing mathjax for offline use...
r4652 else:
MinRK
alternate interpretation of mathjax install dir...
r12812 mathjax_js = os.path.join(dest, 'MathJax.js')
if not os.path.exists(mathjax_js):
raise IOError("%s exists, but does not contain MathJax.js" % dest)
Thomas Kluyver
Convert print statements to print function calls...
r13348 print("%s already exists" % mathjax_js)
Mark Sienkiewicz at STScI
mods to install mathjax from an explicitly downloaded tar or zip file
r8154 return False
MinRK
install offline mathjax to nb_extensions instead of profile
r12809 else:
Mark Sienkiewicz at STScI
mods to install mathjax from an explicitly downloaded tar or zip file
r8154 return True
MinRK
install offline mathjax to nb_extensions instead of profile
r12809 def extract_tar(fd, dest):
"""extract a tarball from filelike `fd` to destination `dest`"""
MinRK
Add utility function for installing mathjax for offline use...
r4652 # use 'r|gz' stream mode, because socket file-like objects can't seek:
Mark Sienkiewicz at STScI
mods to install mathjax from an explicitly downloaded tar or zip file
r8154 tar = tarfile.open(fileobj=fd, mode='r|gz')
MinRK
install offline mathjax to nb_extensions instead of profile
r12809 # The first entry in the archive is the top-level dir
MinRK
Add utility function for installing mathjax for offline use...
r4652 topdir = tar.firstmember.path
Mark Sienkiewicz at STScI
mods to install mathjax from an explicitly downloaded tar or zip file
r8154
MinRK
install offline mathjax to nb_extensions instead of profile
r12809 # extract the archive (contains a single directory) to the destination directory
Matthias BUSSONNIER
use argparse to make most of the parameters configurable
r8682 parent = os.path.abspath(os.path.join(dest, os.path.pardir))
tar.extractall(parent)
Mark Sienkiewicz at STScI
mods to install mathjax from an explicitly downloaded tar or zip file
r8154
MinRK
Add utility function for installing mathjax for offline use...
r4652 # it will be mathjax-MathJax-<sha>, rename to just mathjax
Matthias BUSSONNIER
use argparse to make most of the parameters configurable
r8682 os.rename(os.path.join(parent, topdir), dest)
MinRK
Add utility function for installing mathjax for offline use...
r4652
Mark Sienkiewicz at STScI
mods to install mathjax from an explicitly downloaded tar or zip file
r8154
MinRK
install offline mathjax to nb_extensions instead of profile
r12809 def extract_zip(fd, dest):
"""extract a zip file from filelike `fd` to destination `dest`"""
z = zipfile.ZipFile(fd, 'r')
Mark Sienkiewicz at STScI
mods to install mathjax from an explicitly downloaded tar or zip file
r8154
MinRK
install offline mathjax to nb_extensions instead of profile
r12809 # The first entry in the archive is the top-level dir
Mark Sienkiewicz at STScI
mods to install mathjax from an explicitly downloaded tar or zip file
r8154 topdir = z.namelist()[0]
# extract the archive (contains a single directory) to the static/ directory
Matthias BUSSONNIER
use argparse to make most of the parameters configurable
r8682 parent = os.path.abspath(os.path.join(dest, os.path.pardir))
MinRK
install offline mathjax to nb_extensions instead of profile
r12809 z.extractall(parent)
Mark Sienkiewicz at STScI
mods to install mathjax from an explicitly downloaded tar or zip file
r8154
# it will be mathjax-MathJax-<sha>, rename to just mathjax
Matthias BUSSONNIER
use argparse to make most of the parameters configurable
r8682 d = os.path.join(parent, topdir)
os.rename(os.path.join(parent, topdir), dest)
Mark Sienkiewicz at STScI
mods to install mathjax from an explicitly downloaded tar or zip file
r8154
MinRK
install offline mathjax to nb_extensions instead of profile
r12809 def install_mathjax(tag='v2.2', dest=default_dest, replace=False, file=None, extractor=extract_tar):
Matthias BUSSONNIER
a few fixes...
r8507 """Download and/or install MathJax for offline use.
Mark Sienkiewicz at STScI
mods to install mathjax from an explicitly downloaded tar or zip file
r8154
MinRK
s/nb_extensions/nbextensions
r12811 This will install mathjax to the nbextensions dir in your IPYTHONDIR.
Mark Sienkiewicz at STScI
mods to install mathjax from an explicitly downloaded tar or zip file
r8154
MathJax is a ~15MB download, and ~150MB installed.
Parameters
----------
replace : bool [False]
Whether to remove and replace an existing install.
MinRK
alternate interpretation of mathjax install dir...
r12812 dest : str [IPYTHONDIR/nbextensions/mathjax]
Where to install mathjax
MinRK
install offline mathjax to nb_extensions instead of profile
r12809 tag : str ['v2.2']
Which tag to download. Default is 'v2.2', the current stable release,
Mark Sienkiewicz at STScI
mods to install mathjax from an explicitly downloaded tar or zip file
r8154 but alternatives include 'v1.1a' and 'master'.
Matthias BUSSONNIER
a few fixes...
r8507 file : file like object [ defualt to content of https://github.com/mathjax/MathJax/tarball/#{tag}]
File handle from which to untar/unzip/... mathjax
extractor : function
MinRK
install offline mathjax to nb_extensions instead of profile
r12809 Method to use to untar/unzip/... `file`
Mark Sienkiewicz at STScI
mods to install mathjax from an explicitly downloaded tar or zip file
r8154 """
MinRK
install offline mathjax to nb_extensions instead of profile
r12809 try:
anything_to_do = prepare_dest(dest, replace)
except OSError as e:
Thomas Kluyver
Clean up converted code....
r13386 print("ERROR %s, require write access to %s" % (e, dest))
MinRK
install offline mathjax to nb_extensions instead of profile
r12809 return 1
else:
if not anything_to_do:
return 0
Mark Sienkiewicz at STScI
mods to install mathjax from an explicitly downloaded tar or zip file
r8154
MinRK
install offline mathjax to nb_extensions instead of profile
r12809 if file is None:
Mark Sienkiewicz at STScI
mods to install mathjax from an explicitly downloaded tar or zip file
r8154 # download mathjax
ahmadia
fix mathjax download url to new GitHub format
r12875 mathjax_url = "https://github.com/mathjax/MathJax/archive/%s.tar.gz" %tag
Thomas Kluyver
Convert print statements to print function calls...
r13348 print("Downloading mathjax source from %s" % mathjax_url)
Sean Vig
Fix Python 3 handling of urllib...
r13640 response = urlopen(mathjax_url)
Matthias BUSSONNIER
a few fixes...
r8507 file = response.fp
Mark Sienkiewicz at STScI
mods to install mathjax from an explicitly downloaded tar or zip file
r8154
Thomas Kluyver
Convert print statements to print function calls...
r13348 print("Extracting to %s" % dest)
MinRK
install offline mathjax to nb_extensions instead of profile
r12809 extractor(file, dest)
return 0
def main():
Matthias BUSSONNIER
use argparse to make most of the parameters configurable
r8682 parser = argparse.ArgumentParser(
description="""Install mathjax from internet or local archive""",
MinRK
install offline mathjax to nb_extensions instead of profile
r12809 )
Kyle Kelley
Add way to install MathJax to a particular profile
r12287
parser.add_argument(
Matthias BUSSONNIER
use argparse to make most of the parameters configurable
r8682 '-i',
'--install-dir',
MinRK
alternate interpretation of mathjax install dir...
r12812 default=nbextensions,
help='custom installation directory. Mathjax will be installed in here/mathjax')
Kyle Kelley
Make profile not set a default
r12291
Matthias BUSSONNIER
use argparse to make most of the parameters configurable
r8682 parser.add_argument(
'-d',
MinRK
install offline mathjax to nb_extensions instead of profile
r12809 '--print-dest',
Matthias BUSSONNIER
use argparse to make most of the parameters configurable
r8682 action='store_true',
MinRK
install offline mathjax to nb_extensions instead of profile
r12809 help='print where mathjax would be installed and exit')
Matthias BUSSONNIER
use argparse to make most of the parameters configurable
r8682 parser.add_argument(
'-r',
'--replace',
action='store_true',
Kyle Kelley
Add way to install MathJax to a particular profile
r12287 help='Whether to replace current mathjax if it already exists')
MinRK
install offline mathjax to nb_extensions instead of profile
r12809 parser.add_argument('filename',
help="the local tar/zip-ball filename containing mathjax",
Matthias BUSSONNIER
use argparse to make most of the parameters configurable
r8682 nargs='?',
MinRK
install offline mathjax to nb_extensions instead of profile
r12809 metavar='filename')
Matthias BUSSONNIER
use argparse to make most of the parameters configurable
r8682
pargs = parser.parse_args()
MinRK
alternate interpretation of mathjax install dir...
r12812 dest = os.path.join(pargs.install_dir, 'mathjax')
Kyle Kelley
Add way to install MathJax to a particular profile
r12287
MinRK
install offline mathjax to nb_extensions instead of profile
r12809 if pargs.print_dest:
Thomas Kluyver
Convert print statements to print function calls...
r13348 print(dest)
Mark Sienkiewicz at STScI
mods to install mathjax from an explicitly downloaded tar or zip file
r8154 return
# remove/replace existing mathjax?
MinRK
install offline mathjax to nb_extensions instead of profile
r12809 replace = pargs.replace
Mark Sienkiewicz at STScI
mods to install mathjax from an explicitly downloaded tar or zip file
r8154
Matthias BUSSONNIER
a few fixes...
r8507 # do it
MinRK
install offline mathjax to nb_extensions instead of profile
r12809 if pargs.filename:
fname = pargs.filename
Mark Sienkiewicz at STScI
mods to install mathjax from an explicitly downloaded tar or zip file
r8154
# automatically detect zip/tar - could do something based
Matthias BUSSONNIER
use argparse to make most of the parameters configurable
r8682 # on file content, but really not cost-effective here.
MinRK
install offline mathjax to nb_extensions instead of profile
r12809 if fname.endswith('.zip'):
Mark Sienkiewicz at STScI
mods to install mathjax from an explicitly downloaded tar or zip file
r8154 extractor = extract_zip
else :
extractor = extract_tar
# do it
MinRK
install offline mathjax to nb_extensions instead of profile
r12809 return install_mathjax(file=open(fname, "rb"), replace=replace, extractor=extractor, dest=dest)
Matthias BUSSONNIER
use argparse to make most of the parameters configurable
r8682 else:
MinRK
install offline mathjax to nb_extensions instead of profile
r12809 return install_mathjax(replace=replace, dest=dest)
Matthias BUSSONNIER
use argparse to make most of the parameters configurable
r8682
Mark Sienkiewicz at STScI
mods to install mathjax from an explicitly downloaded tar or zip file
r8154
if __name__ == '__main__' :
Matthias BUSSONNIER
use argparse to make most of the parameters configurable
r8682 sys.exit(main())
MinRK
Add utility function for installing mathjax for offline use...
r4652
Paul Ivanov
fix bug in mathjax...
r12401 __all__ = ['install_mathjax', 'main', 'default_dest']