##// END OF EJS Templates
remove mathjax utils...
Matthias Bussonnier -
Show More
@@ -1,237 +1,13 b''
1 #!/usr/bin/python
1 #!/usr/bin/python
2 """Utility function for installing MathJax javascript library into
3 your IPython nbextensions directory, for offline use.
4
5 Authors:
6
7 * Min RK
8 * Mark Sienkiewicz
9 * Matthias Bussonnier
10
11 To download and install MathJax:
12
13 From Python:
14
15 >>> from IPython.external.mathjax import install_mathjax
16 >>> install_mathjax()
17
18 From the command line:
19
20 $ python -m IPython.external.mathjax
21
22 To a specific location:
23
24 $ python -m IPython.external.mathjax -i /usr/share/
25
26 will install mathjax to /usr/share/mathjax
27
28 To install MathJax from a file you have already downloaded:
29
30 $ python -m IPython.external.mathjax mathjax-xxx.tar.gz
31 $ python -m IPython.external.mathjax mathjax-xxx.zip
32
33 It will not install MathJax if it is already there. Use -r to
34 replace the existing copy of MathJax.
35
36 To find the directory where IPython would like MathJax installed:
37
38 $ python -m IPython.external.mathjax -d
39
40 """
2 """
41 from __future__ import print_function
3 `IPython.external.mathjax` is deprecated with IPython 4.0+
42
43
44 #-----------------------------------------------------------------------------
45 # Copyright (C) 2011 The IPython Development Team
46 #
47 # Distributed under the terms of the BSD License. The full license is in
48 # the file COPYING, distributed as part of this software.
49 #-----------------------------------------------------------------------------
50
51
52 #-----------------------------------------------------------------------------
53 # Imports
54 #-----------------------------------------------------------------------------
55
56 import argparse
57 import os
58 import shutil
59 import sys
60 import tarfile
61 import zipfile
62
63 from IPython.paths import get_ipython_dir
64
65 try:
66 from urllib.request import urlopen # Py 3
67 except ImportError:
68 from urllib2 import urlopen
69
70 #-----------------------------------------------------------------------------
71 #
72 #-----------------------------------------------------------------------------
73
74 # Where mathjax will be installed
75
76 nbextensions = os.path.join(get_ipython_dir(), 'nbextensions')
77 default_dest = os.path.join(nbextensions, 'mathjax')
78
79 # Test for access to install mathjax
80
81 def prepare_dest(dest, replace=False):
82 """prepare the destination folder for mathjax install
83
84 Returns False if mathjax appears to already be installed and there is nothing to do,
85 True otherwise.
86 """
87
88 parent = os.path.abspath(os.path.join(dest, os.path.pardir))
89 if not os.path.exists(parent):
90 os.makedirs(parent)
91
92 if os.path.exists(dest):
93 if replace:
94 print("removing existing MathJax at %s" % dest)
95 shutil.rmtree(dest)
96 return True
97 else:
98 mathjax_js = os.path.join(dest, 'MathJax.js')
99 if not os.path.exists(mathjax_js):
100 raise IOError("%s exists, but does not contain MathJax.js" % dest)
101 print("%s already exists" % mathjax_js)
102 return False
103 else:
104 return True
105
4
5 mathjax is now install by default with the notebook package
106
6
107 def extract_tar(fd, dest):
7 """
108 """extract a tarball from filelike `fd` to destination `dest`"""
109 # use 'r|gz' stream mode, because socket file-like objects can't seek:
110 tar = tarfile.open(fileobj=fd, mode='r|gz')
111
112 # The first entry in the archive is the top-level dir
113 topdir = tar.firstmember.path
114
115 # extract the archive (contains a single directory) to the destination directory
116 parent = os.path.abspath(os.path.join(dest, os.path.pardir))
117 tar.extractall(parent)
118
119 # it will be mathjax-MathJax-<sha>, rename to just mathjax
120 os.rename(os.path.join(parent, topdir), dest)
121
122
123 def extract_zip(fd, dest):
124 """extract a zip file from filelike `fd` to destination `dest`"""
125 z = zipfile.ZipFile(fd, 'r')
126
127 # The first entry in the archive is the top-level dir
128 topdir = z.namelist()[0]
129
130 # extract the archive (contains a single directory) to the static/ directory
131 parent = os.path.abspath(os.path.join(dest, os.path.pardir))
132 z.extractall(parent)
133
134 # it will be mathjax-MathJax-<sha>, rename to just mathjax
135 os.rename(os.path.join(parent, topdir), dest)
136
137
138 def install_mathjax(tag='2.4.0', dest=default_dest, replace=False, file=None, extractor=extract_tar):
139 """Download and/or install MathJax for offline use.
140
141 This will install mathjax to the nbextensions dir in your IPYTHONDIR.
142
143 MathJax is a ~15MB download, and ~150MB installed.
144
145 Parameters
146 ----------
147
148 replace : bool [False]
149 Whether to remove and replace an existing install.
150 dest : str [IPYTHONDIR/nbextensions/mathjax]
151 Where to install mathjax
152 tag : str ['2.4.0']
153 Which tag to download. Default is '2.4.0', the current stable release,
154 but alternatives include 'v1.1a' and 'master'.
155 file : file like object [ defualt to content of https://github.com/mathjax/MathJax/tarball/#{tag}]
156 File handle from which to untar/unzip/... mathjax
157 extractor : function
158 Method to use to untar/unzip/... `file`
159 """
160 try:
161 anything_to_do = prepare_dest(dest, replace)
162 except OSError as e:
163 print("ERROR %s, require write access to %s" % (e, dest))
164 return 1
165 else:
166 if not anything_to_do:
167 return 0
168
169 if file is None:
170 # download mathjax
171 mathjax_url = "https://github.com/mathjax/MathJax/archive/%s.tar.gz" %tag
172 print("Downloading mathjax source from %s" % mathjax_url)
173 response = urlopen(mathjax_url)
174 file = response.fp
175
176 print("Extracting to %s" % dest)
177 extractor(file, dest)
178 return 0
179
180
181 def main():
182 parser = argparse.ArgumentParser(
183 description="""Install mathjax from internet or local archive""",
184 )
185
186 parser.add_argument(
187 '-i',
188 '--install-dir',
189 default=nbextensions,
190 help='custom installation directory. Mathjax will be installed in here/mathjax')
191
192 parser.add_argument(
193 '-d',
194 '--print-dest',
195 action='store_true',
196 help='print where mathjax would be installed and exit')
197 parser.add_argument(
198 '-r',
199 '--replace',
200 action='store_true',
201 help='Whether to replace current mathjax if it already exists')
202 parser.add_argument('filename',
203 help="the local tar/zip-ball filename containing mathjax",
204 nargs='?',
205 metavar='filename')
206
207 pargs = parser.parse_args()
208
209 dest = os.path.join(pargs.install_dir, 'mathjax')
210
211 if pargs.print_dest:
212 print(dest)
213 return
214
215 # remove/replace existing mathjax?
216 replace = pargs.replace
217
218 # do it
219 if pargs.filename:
220 fname = pargs.filename
221
222 # automatically detect zip/tar - could do something based
223 # on file content, but really not cost-effective here.
224 if fname.endswith('.zip'):
225 extractor = extract_zip
226 else :
227 extractor = extract_tar
228 # do it
229 return install_mathjax(file=open(fname, "rb"), replace=replace, extractor=extractor, dest=dest)
230 else:
231 return install_mathjax(replace=replace, dest=dest)
232
8
9 import sys
233
10
234 if __name__ == '__main__' :
11 if __name__ == '__main__' :
235 sys.exit(main())
12 sys.exit("IPython.external.mathjax is deprecated")
236
13
237 __all__ = ['install_mathjax', 'main', 'default_dest']
General Comments 0
You need to be logged in to leave comments. Login now