export.py
169 lines
| 5.2 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
|
r11367 | from IPython.config import Config | ||
Jonathan Frederic
|
r10624 | |||
Jonathan Frederic
|
r10788 | from .exporter import Exporter | ||
Jonathan Frederic
|
r11733 | from .html import HTMLExporter | ||
Jonathan Frederic
|
r11744 | from .slides import SlidesExporter | ||
Jonathan Frederic
|
r10788 | from .latex import LatexExporter | ||
from .markdown import MarkdownExporter | ||||
from .python import PythonExporter | ||||
MinRK
|
r11449 | from .rst import RSTExporter | ||
Jonathan Frederic
|
r10768 | |||
Jonathan Frederic
|
r10485 | #----------------------------------------------------------------------------- | ||
Jonathan Frederic
|
r10771 | # Classes | ||
Jonathan Frederic
|
r10485 | #----------------------------------------------------------------------------- | ||
Jonathan Frederic
|
r10588 | |||
MinRK
|
r11451 | def DocDecorator(f): | ||
Jonathan Frederic
|
r10690 | |||
Jonathan Frederic
|
r10771 | #Set docstring of function | ||
f.__doc__ = f.__doc__ + """ | ||||
nb : Notebook node | ||||
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 | ||||
---------- | ||||
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. | ||
WARNING: API WILL CHANGE IN FUTURE RELEASES OF NBCONVERT | ||||
""" | ||||
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', | ||
'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. | ||||
Jonathan Frederic
|
r11426 | exporter : Exporter class type 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
|
r11426 | elif not isinstance(exporter, Exporter) and not issubclass(exporter, Exporter): | ||
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
|
r11426 | if isinstance(exporter, Exporter): | ||
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) | ||
Jonathan Frederic
|
r10626 | elif isinstance(nb, basestring): | ||
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( | ||
custom=Exporter, | ||||
html=HTMLExporter, | ||||
slides=SlidesExporter, | ||||
latex=LatexExporter, | ||||
markdown=MarkdownExporter, | ||||
python=PythonExporter, | ||||
rst=RSTExporter, | ||||
) | ||||
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. | ||||
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()) | ||