export.py
211 lines
| 6.8 KiB
| text/x-python
|
PythonLexer
/ nbconvert / export.py
Jonathan Frederic
|
r10677 | """ | |
Jonathan Frederic
|
r10690 | Module containing single call export functions. | |
Jonathan Frederic
|
r10485 | """ | |
#----------------------------------------------------------------------------- | |||
# Copyright (c) 2013, the IPython Development Team. | |||
# | |||
# Distributed under the terms of the Modified BSD License. | |||
# | |||
# The full license is in the file COPYING.txt, distributed with this software. | |||
#----------------------------------------------------------------------------- | |||
Jonathan Frederic
|
r10690 | #----------------------------------------------------------------------------- | |
# Imports | |||
#----------------------------------------------------------------------------- | |||
import sys | |||
import inspect | |||
Jonathan Frederic
|
r10771 | from functools import wraps | |
Jonathan Frederic
|
r10690 | ||
Jonathan Frederic
|
r10624 | from IPython.nbformat.v3.nbbase import NotebookNode | |
Jonathan Frederic
|
r10768 | from .exporters.exporter import Exporter | |
from .exporters.basichtml import BasicHtmlExporter | |||
from .exporters.fullhtml import FullHtmlExporter | |||
from .exporters.latex import LatexExporter | |||
from .exporters.markdown import MarkdownExporter | |||
from .exporters.python import PythonExporter | |||
from .exporters.python_armor import PythonArmorExporter | |||
from .exporters.reveal import RevealExporter | |||
from .exporters.rst import RstExporter | |||
from .exporters.sphinx_howto import SphinxHowtoExporter | |||
from .exporters.sphinx_manual import SphinxManualExporter | |||
Jonathan Frederic
|
r10485 | #----------------------------------------------------------------------------- | |
Jonathan Frederic
|
r10771 | # Classes | |
Jonathan Frederic
|
r10485 | #----------------------------------------------------------------------------- | |
Jonathan Frederic
|
r10588 | ||
Jonathan Frederic
|
r10771 | def DocDecorator(f): | |
Jonathan Frederic
|
r10690 | ||
Jonathan Frederic
|
r10771 | #Set docstring of function | |
f.__doc__ = f.__doc__ + """ | |||
nb : Notebook node | |||
Jonathan Frederic
|
r10690 | config : config | |
User configuration instance. | |||
transformers : list[of transformer] | |||
Custom transformers to apply to the notebook prior to engaging | |||
the Jinja template engine. Any transformers specified here | |||
will override existing transformers if a naming conflict | |||
occurs. | |||
filters : list[of filter] | |||
Custom filters to make accessible to the Jinja templates. Any | |||
filters specified here will override existing filters if a | |||
naming conflict occurs. | |||
Returns | |||
---------- | |||
tuple- output, resources, exporter_instance | |||
output : str | |||
Jinja 2 output. This is the resulting converted notebook. | |||
resources : dictionary | |||
Dictionary of resources used prior to and during the conversion | |||
process. | |||
exporter_instance : Exporter | |||
Instance of the Exporter class used to export the document. Useful | |||
to caller because it provides a 'file_extension' property which | |||
Jonathan Frederic
|
r10771 | specifies what extension the output should be saved as.""" | |
@wraps(f) | |||
def decorator(*args, **kwargs): | |||
return f(*args, **kwargs) | |||
return decorator | |||
#----------------------------------------------------------------------------- | |||
# Functions | |||
#----------------------------------------------------------------------------- | |||
@DocDecorator | |||
def export(exporter_type, nb, config=None, transformers=None, filters=None): | |||
""" | |||
Export a notebook object using specific exporter class. | |||
exporter_type : Exporter class type | |||
Class type of the exporter that should be used. This method | |||
will initialize it's own instance of the class. It is | |||
ASSUMED that the class type provided exposes a | |||
constructor (__init__) with the same signature as the | |||
base Exporter class.} | |||
Jonathan Frederic
|
r10690 | """ | |
Jonathan Frederic
|
r10624 | ||
#Check arguments | |||
if exporter_type is None: | |||
raise TypeError("Exporter is None") | |||
Jonathan Frederic
|
r10626 | elif not issubclass(exporter_type, Exporter): | |
Jonathan Frederic
|
r10624 | raise TypeError("Exporter type does not inherit from Exporter (base)") | |
if nb is None: | |||
raise TypeError("nb is None") | |||
#Create the exporter | |||
Jonathan Frederic
|
r10690 | exporter_instance = exporter_type(preprocessors=transformers, | |
jinja_filters=filters, config=config) | |||
Jonathan Frederic
|
r10624 | ||
#Try to convert the notebook using the appropriate conversion function. | |||
if isinstance(nb, NotebookNode): | |||
Jonathan Frederic
|
r10626 | output, resources = exporter_instance.from_notebook_node(nb) | |
elif isinstance(nb, basestring): | |||
output, resources = exporter_instance.from_filename(nb) | |||
Jonathan Frederic
|
r10624 | else: | |
Jonathan Frederic
|
r10626 | output, resources = exporter_instance.from_file(nb) | |
return output, resources, exporter_instance | |||
Jonathan Frederic
|
r10624 | ||
Jonathan Frederic
|
r10677 | ||
Jonathan Frederic
|
r10771 | @DocDecorator | |
Jonathan Frederic
|
r10690 | def export_sphinx_manual(nb, config=None, transformers=None, filters=None): | |
""" | |||
Export a notebook object to Sphinx Manual LaTeX | |||
""" | |||
Jonathan Frederic
|
r10771 | return export(SphinxManualExporter, nb, config, transformers, filters) | |
Jonathan Frederic
|
r10690 | ||
Jonathan Frederic
|
r10771 | @DocDecorator | |
Jonathan Frederic
|
r10690 | def export_sphinx_howto(nb, config=None, transformers=None, filters=None): | |
""" | |||
Export a notebook object to Sphinx HowTo LaTeX | |||
""" | |||
Jonathan Frederic
|
r10771 | return export(SphinxHowtoExporter, nb, config, transformers, filters) | |
Jonathan Frederic
|
r10690 | ||
Jonathan Frederic
|
r10771 | @DocDecorator | |
Jonathan Frederic
|
r10690 | def export_basic_html(nb, config=None, transformers=None, filters=None): | |
""" | |||
Export a notebook object to Basic HTML | |||
""" | |||
Jonathan Frederic
|
r10771 | return export(BasicHtmlExporter, nb, config, transformers, filters) | |
Jonathan Frederic
|
r10690 | ||
Jonathan Frederic
|
r10771 | @DocDecorator | |
Jonathan Frederic
|
r10690 | def export_full_html(nb, config=None, transformers=None, filters=None): | |
""" | |||
Export a notebook object to Full HTML | |||
""" | |||
Jonathan Frederic
|
r10771 | return export(FullHtmlExporter, nb, config, transformers, filters) | |
Jonathan Frederic
|
r10690 | ||
Jonathan Frederic
|
r10771 | @DocDecorator | |
Jonathan Frederic
|
r10690 | def export_latex(nb, config=None, transformers=None, filters=None): | |
""" | |||
Export a notebook object to LaTeX | |||
""" | |||
Jonathan Frederic
|
r10771 | return export(LatexExporter, nb, config, transformers, filters) | |
Jonathan Frederic
|
r10690 | ||
Jonathan Frederic
|
r10771 | @DocDecorator | |
Jonathan Frederic
|
r10690 | def export_markdown(nb, config=None, transformers=None, filters=None): | |
""" | |||
Export a notebook object to Markdown | |||
""" | |||
Jonathan Frederic
|
r10771 | return export(MarkdownExporter, nb, config, transformers, filters) | |
Jonathan Frederic
|
r10690 | ||
Jonathan Frederic
|
r10771 | @DocDecorator | |
Jonathan Frederic
|
r10690 | def export_python(nb, config=None, transformers=None, filters=None): | |
""" | |||
Export a notebook object to Python | |||
""" | |||
Jonathan Frederic
|
r10771 | return export(PythonExporter, nb, config, transformers, filters) | |
Jonathan Frederic
|
r10690 | ||
Jonathan Frederic
|
r10771 | @DocDecorator | |
Jonathan Frederic
|
r10690 | def export_python_armor(nb, config=None, transformers=None, filters=None): | |
""" | |||
Export a notebook object to Python (Armor) | |||
""" | |||
Jonathan Frederic
|
r10771 | return export(PythonArmorExporter, nb, config, transformers, filters) | |
Jonathan Frederic
|
r10690 | ||
Jonathan Frederic
|
r10771 | @DocDecorator | |
Jonathan Frederic
|
r10690 | def export_reveal(nb, config=None, transformers=None, filters=None): | |
""" | |||
Export a notebook object to Reveal | |||
""" | |||
Jonathan Frederic
|
r10771 | return export(RevealExporter, nb, config, transformers, filters) | |
Jonathan Frederic
|
r10690 | ||
Jonathan Frederic
|
r10771 | @DocDecorator | |
Jonathan Frederic
|
r10690 | def export_rst(nb, config=None, transformers=None, filters=None): | |
""" | |||
Export a notebook object to RST | |||
""" | |||
Jonathan Frederic
|
r10771 | return export(RstExporter, nb, config, transformers, filters) | |
Jonathan Frederic
|
r10485 | ||
Jonathan Frederic
|
r10677 | ||
Jonathan Frederic
|
r10771 | @DocDecorator | |
def export_by_name(template_name, nb, config=None, transformers=None, filters=None): | |||
Jonathan Frederic
|
r10690 | """ | |
Export a notebook object to a template type by its name. Reflection | |||
(Inspect) is used to find the template's corresponding explicit export | |||
method defined in this module. That method is then called directly. | |||
template_name : str | |||
Name of the template style to export to. | |||
""" | |||
Jonathan Frederic
|
r10769 | function_name = "export_" + template_name.lower() | |
Jonathan Frederic
|
r10690 | ||
Jonathan Frederic
|
r10769 | if function_name in globals(): | |
return globals()[function_name](nb, config, transformers, filters) | |||
else: | |||
return None | |||
Jonathan Frederic
|
r10690 |