export.py
235 lines
| 6.6 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 | ||
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 | ||||
MinRK
|
r11449 | from .rst import RSTExporter | ||
Jonathan Frederic
|
r10788 | 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 | |||
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
|
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', | ||||
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
|
r11395 | |||
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: | ||||
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 | |||
Jonathan Frederic
|
r10677 | |||
Jonathan Frederic
|
r10771 | @DocDecorator | ||
Jonathan Frederic
|
r11367 | def export_sphinx_manual(nb, **kw): | ||
Jonathan Frederic
|
r10690 | """ | ||
Export a notebook object to Sphinx Manual LaTeX | ||||
""" | ||||
Jonathan Frederic
|
r11367 | return export(SphinxManualExporter, nb, **kw) | ||
Jonathan Frederic
|
r10690 | |||
Jonathan Frederic
|
r10771 | @DocDecorator | ||
Jonathan Frederic
|
r11367 | def export_sphinx_howto(nb, **kw): | ||
Jonathan Frederic
|
r10690 | """ | ||
Export a notebook object to Sphinx HowTo LaTeX | ||||
""" | ||||
Jonathan Frederic
|
r11367 | return export(SphinxHowtoExporter, nb, **kw) | ||
Jonathan Frederic
|
r10690 | |||
Jonathan Frederic
|
r10771 | @DocDecorator | ||
Jonathan Frederic
|
r11367 | def export_basic_html(nb, **kw): | ||
Jonathan Frederic
|
r10690 | """ | ||
Export a notebook object to Basic HTML | ||||
""" | ||||
Jonathan Frederic
|
r11367 | return export(BasicHTMLExporter, nb, **kw) | ||
Jonathan Frederic
|
r10690 | |||
Jonathan Frederic
|
r10771 | @DocDecorator | ||
Jonathan Frederic
|
r11367 | def export_full_html(nb, **kw): | ||
Jonathan Frederic
|
r10690 | """ | ||
Export a notebook object to Full HTML | ||||
""" | ||||
Jonathan Frederic
|
r11367 | return export(FullHTMLExporter, nb, **kw) | ||
Jonathan Frederic
|
r10690 | |||
Jonathan Frederic
|
r10771 | @DocDecorator | ||
Jonathan Frederic
|
r11367 | def export_latex(nb, **kw): | ||
Jonathan Frederic
|
r10690 | """ | ||
Export a notebook object to LaTeX | ||||
""" | ||||
Jonathan Frederic
|
r11367 | return export(LatexExporter, nb, **kw) | ||
Jonathan Frederic
|
r10690 | |||
Jonathan Frederic
|
r10771 | @DocDecorator | ||
Jonathan Frederic
|
r11367 | def export_markdown(nb, **kw): | ||
Jonathan Frederic
|
r10690 | """ | ||
Export a notebook object to Markdown | ||||
""" | ||||
Jonathan Frederic
|
r11367 | return export(MarkdownExporter, nb, **kw) | ||
Jonathan Frederic
|
r10690 | |||
Jonathan Frederic
|
r10771 | @DocDecorator | ||
Jonathan Frederic
|
r11367 | def export_python(nb, **kw): | ||
Jonathan Frederic
|
r10690 | """ | ||
Export a notebook object to Python | ||||
""" | ||||
Jonathan Frederic
|
r11367 | return export(PythonExporter, nb, **kw) | ||
Jonathan Frederic
|
r10690 | |||
Jonathan Frederic
|
r10771 | @DocDecorator | ||
Jonathan Frederic
|
r11367 | def export_reveal(nb, **kw): | ||
Jonathan Frederic
|
r10690 | """ | ||
MinRK
|
r11449 | Export a notebook object to a Reveal.js presentation | ||
Jonathan Frederic
|
r10690 | """ | ||
Jonathan Frederic
|
r11367 | return export(RevealExporter, nb, **kw) | ||
Jonathan Frederic
|
r10690 | |||
Jonathan Frederic
|
r10771 | @DocDecorator | ||
Jonathan Frederic
|
r11367 | def export_rst(nb, **kw): | ||
Jonathan Frederic
|
r10690 | """ | ||
MinRK
|
r11449 | Export a notebook object to reStructuredText | ||
Jonathan Frederic
|
r10690 | """ | ||
MinRK
|
r11449 | return export(RSTExporter, nb, **kw) | ||
Jonathan Frederic
|
r10485 | |||
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(): | ||
"Return a list of the currently supported export targets" | ||||
# grab everything after 'export_' | ||||
l = [x[len('export_'):] for x in __all__ if x.startswith('export_')] | ||||
Jonathan Frederic
|
r11367 | |||
Jonathan Frederic
|
r11377 | # filter out the one method that is not a template | ||
Paul Ivanov
|
r11250 | l = [x for x in l if 'by_name' not in x] | ||
return sorted(l) | ||||
MinRK
|
r11451 | |||
def get_exporters(): | ||||
"Return a list of the currently supported export targets" | ||||
# grab everything after 'export_' | ||||
l = [x for x in __all__ if x.endswith('Exporter')] | ||||
g = globals() | ||||
# filter out the one method that is not a template | ||||
l = [g[x] for x in l if issubclass(g[x], Exporter)] | ||||
return sorted(l) | ||||