export.py
174 lines
| 5.3 KiB
| text/x-python
|
PythonLexer
MinRK
|
r16265 | """Module containing single call export functions.""" | ||
Jonathan Frederic
|
r10485 | |||
MinRK
|
r16265 | # Copyright (c) IPython Development Team. | ||
# Distributed under the terms of the Modified BSD License. | ||||
Jonathan Frederic
|
r10690 | |||
Jonathan Frederic
|
r10771 | from functools import wraps | ||
Jonathan Frederic
|
r10690 | |||
Jonathan Frederic
|
r10624 | from IPython.nbformat.v3.nbbase import NotebookNode | ||
Thomas Kluyver
|
r13597 | from IPython.utils.decorators import undoc | ||
Thomas Kluyver
|
r13353 | from IPython.utils.py3compat import string_types | ||
Jonathan Frederic
|
r10624 | |||
Jonathan Frederic
|
r12507 | from .exporter import Exporter | ||
Jonathan Frederic
|
r12505 | from .templateexporter import TemplateExporter | ||
Jonathan Frederic
|
r11733 | from .html import HTMLExporter | ||
Jonathan Frederic
|
r11744 | from .slides import SlidesExporter | ||
Jonathan Frederic
|
r10788 | from .latex import LatexExporter | ||
MinRK
|
r16265 | from .pdf import PDFExporter | ||
Jonathan Frederic
|
r10788 | from .markdown import MarkdownExporter | ||
from .python import PythonExporter | ||||
MinRK
|
r11449 | from .rst import RSTExporter | ||
Julia Evans
|
r16822 | from .notebook import NotebookExporter | ||
Jonathan Frederic
|
r10768 | |||
Jonathan Frederic
|
r10485 | #----------------------------------------------------------------------------- | ||
Jonathan Frederic
|
r10771 | # Classes | ||
Jonathan Frederic
|
r10485 | #----------------------------------------------------------------------------- | ||
Jonathan Frederic
|
r10588 | |||
Thomas Kluyver
|
r13597 | @undoc | ||
MinRK
|
r11451 | def DocDecorator(f): | ||
Jonathan Frederic
|
r10690 | |||
Jonathan Frederic
|
r10771 | #Set docstring of function | ||
f.__doc__ = f.__doc__ + """ | ||||
Thomas Kluyver
|
r13625 | nb : :class:`~{nbnode_mod}.NotebookNode` | ||
Thomas Kluyver
|
r13597 | The notebook to export. | ||
Jonathan Frederic
|
r11367 | config : config (optional, keyword arg) | ||
Jonathan Frederic
|
r10690 | User configuration instance. | ||
Jonathan Frederic
|
r11367 | resources : dict (optional, keyword arg) | ||
Resources used in the conversion process. | ||||
Jonathan Frederic
|
r10690 | |||
Returns | ||||
Thomas Kluyver
|
r13597 | ------- | ||
Jonathan Frederic
|
r10690 | 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
|
r11755 | specifies what extension the output should be saved as. | ||
Thomas Kluyver
|
r13597 | Notes | ||
----- | ||||
Jonathan Frederic
|
r11755 | WARNING: API WILL CHANGE IN FUTURE RELEASES OF NBCONVERT | ||
Thomas Kluyver
|
r13625 | """.format(nbnode_mod=NotebookNode.__module__) | ||
Jonathan Frederic
|
r10771 | |||
@wraps(f) | ||||
def decorator(*args, **kwargs): | ||||
return f(*args, **kwargs) | ||||
return decorator | ||||
#----------------------------------------------------------------------------- | ||||
# Functions | ||||
#----------------------------------------------------------------------------- | ||||
Brian E. Granger
|
r11088 | __all__ = [ | ||
'export', | ||||
Jonathan Frederic
|
r11733 | 'export_html', | ||
Jonathan Frederic
|
r11743 | 'export_custom', | ||
Jonathan Frederic
|
r11744 | 'export_slides', | ||
Brian E. Granger
|
r11088 | 'export_latex', | ||
MinRK
|
r16265 | 'export_pdf', | ||
Brian E. Granger
|
r11088 | 'export_markdown', | ||
'export_python', | ||||
'export_rst', | ||||
Paul Ivanov
|
r11250 | 'export_by_name', | ||
Jonathan Frederic
|
r11395 | 'get_export_names', | ||
'ExporterNameError' | ||||
Brian E. Granger
|
r11088 | ] | ||
Jonathan Frederic
|
r11395 | |||
Jonathan Frederic
|
r11372 | class ExporterNameError(NameError): | ||
pass | ||||
Jonathan Frederic
|
r10771 | @DocDecorator | ||
Jonathan Frederic
|
r11426 | def export(exporter, nb, **kw): | ||
Jonathan Frederic
|
r10771 | """ | ||
Export a notebook object using specific exporter class. | ||||
Thomas Kluyver
|
r13597 | Parameters | ||
---------- | ||||
exporter : class:`~IPython.nbconvert.exporters.exporter.Exporter` class or instance | ||||
Class type or instance of the exporter that should be used. If the | ||||
method initializes 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 | ||||
Jonathan Frederic
|
r11426 | if exporter is None: | ||
Jonathan Frederic
|
r10624 | raise TypeError("Exporter is None") | ||
Jonathan Frederic
|
r12506 | elif not isinstance(exporter, Exporter) and not issubclass(exporter, Exporter): | ||
Jonathan Frederic
|
r11426 | raise TypeError("exporter does not inherit from Exporter (base)") | ||
Jonathan Frederic
|
r10624 | if nb is None: | ||
raise TypeError("nb is None") | ||||
#Create the exporter | ||||
Jonathan Frederic
|
r11379 | resources = kw.pop('resources', None) | ||
Jonathan Frederic
|
r12506 | if isinstance(exporter, Exporter): | ||
Jonathan Frederic
|
r11426 | exporter_instance = exporter | ||
else: | ||||
MinRK
|
r11864 | exporter_instance = exporter(**kw) | ||
Jonathan Frederic
|
r10624 | #Try to convert the notebook using the appropriate conversion function. | ||
if isinstance(nb, NotebookNode): | ||||
Jonathan Frederic
|
r11367 | output, resources = exporter_instance.from_notebook_node(nb, resources) | ||
Thomas Kluyver
|
r13353 | elif isinstance(nb, string_types): | ||
Jonathan Frederic
|
r11367 | output, resources = exporter_instance.from_filename(nb, resources) | ||
Jonathan Frederic
|
r10624 | else: | ||
Jonathan Frederic
|
r11367 | output, resources = exporter_instance.from_file(nb, resources) | ||
return output, resources | ||||
Jonathan Frederic
|
r10624 | |||
MinRK
|
r11863 | exporter_map = dict( | ||
Matthias BUSSONNIER
|
r12500 | custom=TemplateExporter, | ||
MinRK
|
r11863 | html=HTMLExporter, | ||
slides=SlidesExporter, | ||||
latex=LatexExporter, | ||||
MinRK
|
r16265 | pdf=PDFExporter, | ||
MinRK
|
r11863 | markdown=MarkdownExporter, | ||
python=PythonExporter, | ||||
rst=RSTExporter, | ||||
Julia Evans
|
r16822 | notebook=NotebookExporter, | ||
MinRK
|
r11863 | ) | ||
def _make_exporter(name, E): | ||||
"""make an export_foo function from a short key and Exporter class E""" | ||||
def _export(nb, **kw): | ||||
return export(E, nb, **kw) | ||||
_export.__doc__ = """Export a notebook object to {0} format""".format(name) | ||||
return _export | ||||
g = globals() | ||||
Jonathan Frederic
|
r10677 | |||
MinRK
|
r11863 | for name, E in exporter_map.items(): | ||
g['export_%s' % name] = DocDecorator(_make_exporter(name, E)) | ||||
Jonathan Frederic
|
r10677 | |||
Jonathan Frederic
|
r10771 | @DocDecorator | ||
Jonathan Frederic
|
r11367 | def export_by_name(format_name, nb, **kw): | ||
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. | ||||
Thomas Kluyver
|
r13597 | Parameters | ||
---------- | ||||
Jonathan Frederic
|
r11367 | format_name : str | ||
Jonathan Frederic
|
r10690 | Name of the template style to export to. | ||
""" | ||||
Jonathan Frederic
|
r11367 | function_name = "export_" + format_name.lower() | ||
Jonathan Frederic
|
r10690 | |||
Jonathan Frederic
|
r10769 | if function_name in globals(): | ||
Jonathan Frederic
|
r11367 | return globals()[function_name](nb, **kw) | ||
Jonathan Frederic
|
r10769 | else: | ||
Jonathan Frederic
|
r11372 | raise ExporterNameError("template for `%s` not found" % function_name) | ||
Matthias BUSSONNIER
|
r10875 | |||
Jonathan Frederic
|
r11395 | |||
Paul Ivanov
|
r11250 | def get_export_names(): | ||
Jonathan Frederic
|
r11755 | """Return a list of the currently supported export targets | ||
WARNING: API WILL CHANGE IN FUTURE RELEASES OF NBCONVERT""" | ||||
MinRK
|
r11863 | return sorted(exporter_map.keys()) | ||