nbconvert.py
87 lines
| 3.3 KiB
| text/x-python
|
PythonLexer
Fernando Perez
|
r6220 | #!/usr/bin/env python | ||
Paul Ivanov
|
r6280 | """Convert IPython notebooks to other formats, such as ReST, and HTML. | ||
Fernando Perez
|
r6220 | |||
Paul Ivanov
|
r6280 | Example: | ||
MinRK
|
r7914 | ./nbconvert.py --format rst file.ipynb | ||
Fernando Perez
|
r6220 | |||
MinRK
|
r7914 | Produces 'file.rst', along with auto-generated figure files | ||
called nb_figure_NN.png. | ||||
Fernando Perez
|
r6220 | """ | ||
Fernando Perez
|
r6677 | #----------------------------------------------------------------------------- | ||
# Imports | ||||
#----------------------------------------------------------------------------- | ||||
Fernando Perez
|
r6671 | from __future__ import print_function | ||
Fernando Perez
|
r6677 | # From IPython | ||
Paul Ivanov
|
r6262 | from IPython.external import argparse | ||
MinRK
|
r7914 | |||
# local | ||||
Matthias BUSSONNIER
|
r8618 | from converters.html import ConverterHTML | ||
from converters.markdown import ConverterMarkdown | ||||
from converters.bloggerhtml import ConverterBloggerHTML | ||||
from converters.rst import ConverterRST | ||||
from converters.latex import ConverterLaTeX | ||||
Matthias BUSSONNIER
|
r8620 | from converters.python import ConverterPy | ||
Jonathan Taylor
|
r7366 | |||
Maximilian Albert
|
r8728 | |||
# When adding a new format, make sure to add it to the `converters` | ||||
# dictionary below. This is used to create the list of known formats, | ||||
# which gets printed in case an unknown format is encounteres, as well | ||||
# as in the help | ||||
Maximilian Albert
|
r8731 | converters = { | ||
'rst': ConverterRST, | ||||
'markdown': ConverterMarkdown, | ||||
'html': ConverterHTML, | ||||
'blogger-html': ConverterBloggerHTML, | ||||
'latex': ConverterLaTeX, | ||||
'py': ConverterPy, | ||||
} | ||||
Maximilian Albert
|
r8728 | |||
Maximilian Albert
|
r8731 | default_format = 'rst' | ||
Maximilian Albert
|
r8730 | |||
Maximilian Albert
|
r8728 | # Extract the list of known formats and mark the first format as the default. | ||
Maximilian Albert
|
r8730 | known_formats = ', '.join([key + " (default)" if key == default_format else key | ||
Maximilian Albert
|
r8733 | for key in converters]) | ||
Maximilian Albert
|
r8728 | |||
Fernando Perez
|
r6220 | |||
Bussonnier Matthias
|
r8945 | def main(infile, format='rst', preamble=None, exclude=[], | ||
David Warde-Farley
|
r8778 | highlight_source=True): | ||
Fernando Perez
|
r6220 | """Convert a notebook to html in one step""" | ||
Maximilian Albert
|
r8728 | try: | ||
ConverterClass = converters[format] | ||||
except KeyError: | ||||
Paul Ivanov
|
r6280 | raise SystemExit("Unknown format '%s', " % format + | ||
Rick Lupton
|
r8750 | "known formats are: " + known_formats) | ||
Fernando Perez
|
r6220 | |||
Matthias BUSSONNIER
|
r8912 | converter = ConverterClass(infile, highlight_source=highlight_source, exclude=exclude) | ||
Maximilian Albert
|
r8728 | converter.render() | ||
Fernando Perez
|
r6677 | #----------------------------------------------------------------------------- | ||
# Script main | ||||
#----------------------------------------------------------------------------- | ||||
Anton I. Sipos
|
r6261 | |||
Paul Ivanov
|
r6280 | if __name__ == '__main__': | ||
parser = argparse.ArgumentParser(description=__doc__, | ||||
formatter_class=argparse.RawTextHelpFormatter) | ||||
Anton I. Sipos
|
r6261 | # TODO: consider passing file like object around, rather than filenames | ||
# would allow us to process stdin, or even http streams | ||||
David Warde-Farley
|
r8749 | #parser.add_argument('infile', nargs='?', type=argparse.FileType('r'), | ||
# default=sys.stdin) | ||||
Anton I. Sipos
|
r6261 | |||
#Require a filename as a positional argument | ||||
parser.add_argument('infile', nargs=1) | ||||
Anton I. Sipos
|
r6265 | parser.add_argument('-f', '--format', default='rst', | ||
Paul Ivanov
|
r6280 | help='Output format. Supported formats: \n' + | ||
known_formats) | ||||
Rick Lupton
|
r8750 | parser.add_argument('-p', '--preamble', | ||
help='Path to a user-specified preamble file') | ||||
Rick Lupton
|
r8753 | parser.add_argument('-e', '--exclude', default='', | ||
help='Comma-separated list of cells to exclude') | ||||
Ivan Djokic
|
r8773 | parser.add_argument('-H', '--no-highlighting', action='store_false', | ||
help='Disable syntax highlighting for code blocks.') | ||||
Anton I. Sipos
|
r6261 | args = parser.parse_args() | ||
Rick Lupton
|
r8753 | exclude_cells = [s.strip() for s in args.exclude.split(',')] | ||
Ivan Djokic
|
r8772 | |||
Ivan Djokic
|
r8775 | main(infile=args.infile[0], format=args.format, preamble=args.preamble, | ||
Matthias BUSSONNIER
|
r8882 | exclude=exclude_cells, highlight_source=args.no_highlighting) | ||