export.py
215 lines
| 6.7 KiB
| text/x-python
|
PythonLexer
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 | ||||
#----------------------------------------------------------------------------- | ||||
Jonathan Frederic
|
r10771 | from functools import wraps | ||
Jonathan Frederic
|
r10690 | |||
Jonathan Frederic
|
r10624 | from IPython.nbformat.v3.nbbase import NotebookNode | ||
Jonathan Frederic
|
r10788 | from .exporter import Exporter | ||
MinRK
|
r11108 | from .basichtml import BasicHTMLExporter | ||
from .fullhtml import FullHTMLExporter | ||||
Jonathan Frederic
|
r10788 | from .latex import LatexExporter | ||
from .markdown import MarkdownExporter | ||||
from .python import PythonExporter | ||||
from .reveal import RevealExporter | ||||
from .rst import RstExporter | ||||
from .sphinx_howto import SphinxHowtoExporter | ||||
from .sphinx_manual import SphinxManualExporter | ||||
Jonathan Frederic
|
r10768 | |||
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 | ||||
#----------------------------------------------------------------------------- | ||||
Brian E. Granger
|
r11088 | __all__ = [ | ||
'export', | ||||
'export_sphinx_manual', | ||||
'export_sphinx_howto', | ||||
'export_basic_html', | ||||
'export_full_html', | ||||
'export_latex', | ||||
'export_markdown', | ||||
'export_python', | ||||
'export_reveal', | ||||
'export_rst', | ||||
'export_by_name' | ||||
] | ||||
Jonathan Frederic
|
r10771 | @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 | ||||
""" | ||||
MinRK
|
r11108 | 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 | ||||
""" | ||||
MinRK
|
r11108 | 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_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: | ||||
Jonathan Frederic
|
r11110 | raise NameError("template not found") | ||
Matthias BUSSONNIER
|
r10875 | |||