##// END OF EJS Templates
all header leven in rst
all header leven in rst

File last commit:

r9426:4fc1f420
r9532:dec581dc
Show More
nbconvert.py
117 lines | 4.0 KiB | text/x-python | PythonLexer
#!/usr/bin/env python
"""Convert IPython notebooks to other formats, such as ReST, and HTML.
Example:
./nbconvert.py --format rst file.ipynb
Produces 'file.rst', along with auto-generated figure files
called nb_figure_NN.png.
"""
#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
from __future__ import print_function
# From IPython
from IPython.external import argparse
# All the stuff needed for the configurable things
from IPython.config.application import Application, catch_config_error
from IPython.config.configurable import Configurable, SingletonConfigurable
from IPython.config.loader import Config, ConfigFileNotFound
from IPython.utils.traitlets import List, Unicode, Type, Bool, Dict, CaselessStrEnum
# local
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
from converters.python import ConverterPy
from converters.base import Converter
# 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
converters = {
'rst': ConverterRST,
'markdown': ConverterMarkdown,
'html': ConverterHTML,
'blogger-html': ConverterBloggerHTML,
'latex': ConverterLaTeX,
'py': ConverterPy,
}
default_format = 'rst'
# Extract the list of known formats and mark the first format as the default.
known_formats = ', '.join([key + " (default)" if key == default_format else key
for key in converters])
class NbconvertApp(Application):
fmt = CaselessStrEnum(converters.keys(),
default_value='rst',
config=True,
help="Supported conversion format")
exclude = List( [],
config=True,
help = 'list of cells to exclude while converting')
aliases = {
'format':'NbconvertApp.fmt',
'exclude':'NbconvertApp.exclude',
'highlight':'Converter.highlight_source',
'preamble':'Converter.preamble',
}
def __init__(self, **kwargs):
super(NbconvertApp, self).__init__(**kwargs)
# ensure those are registerd
self.classes.insert(0,Converter)
self.classes.insert(0,ConverterRST)
self.classes.insert(0,ConverterMarkdown)
self.classes.insert(0,ConverterBloggerHTML)
self.classes.insert(0,ConverterLaTeX)
self.classes.insert(0,ConverterPy)
def initialize(self, argv=None):
self.parse_command_line(argv)
cl_config = self.config
self.update_config(cl_config)
def run(self):
"""Convert a notebook to html in one step"""
ConverterClass = converters[self.fmt]
infile = (self.extra_args or [None])[0]
converter = ConverterClass(infile=infile, config=self.config)
converter.render()
def main():
"""Convert a notebook to html in one step"""
app = NbconvertApp.instance()
app.description = __doc__
app.initialize()
app.start()
app.run()
#-----------------------------------------------------------------------------
# Script main
#-----------------------------------------------------------------------------
if __name__ == '__main__':
# TODO: consider passing file like object around, rather than filenames
# would allow us to process stdin, or even http streams
#parser.add_argument('infile', nargs='?', type=argparse.FileType('r'),
# default=sys.stdin)
#parser.add_argument('-e', '--exclude', default='',
# help='Comma-separated list of cells to exclude')
#exclude_cells = [s.strip() for s in args.exclude.split(',')]
main()