##// END OF EJS Templates
added listing of known exporters on error
added listing of known exporters on error

File last commit:

r11250:0952169d
r11250:0952169d
Show More
export.py
233 lines | 7.4 KiB | text/x-python | PythonLexer
Jonathan Frederic
Cleanup and refactor of API, almost complete....
r10677 """
Jonathan Frederic
Finished rename/refact on API namespace
r10690 Module containing single call export functions.
Jonathan Frederic
Post code-review, extended refactor.
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
Finished rename/refact on API namespace
r10690 #-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
Jonathan Frederic
Docstring decorator
r10771 from functools import wraps
Jonathan Frederic
Finished rename/refact on API namespace
r10690
Jonathan Frederic
Fixed all broken references, refactored some stuff here and there,...
r10624 from IPython.nbformat.v3.nbbase import NotebookNode
Jonathan Frederic
Moved export.py back into exporters directory
r10788 from .exporter import Exporter
MinRK
fix HTML capitalization in exporter classes
r11108 from .basichtml import BasicHTMLExporter
from .fullhtml import FullHTMLExporter
Jonathan Frederic
Moved export.py back into exporters directory
r10788 from .latex import LatexExporter
from .markdown import MarkdownExporter
from .python import PythonExporter
from .python_armor import PythonArmorExporter
from .reveal import RevealExporter
from .rst import RstExporter
from .sphinx_howto import SphinxHowtoExporter
from .sphinx_manual import SphinxManualExporter
Jonathan Frederic
Import fix for renamed /api/ to /exporters/
r10768
Jonathan Frederic
Post code-review, extended refactor.
r10485 #-----------------------------------------------------------------------------
Jonathan Frederic
Docstring decorator
r10771 # Classes
Jonathan Frederic
Post code-review, extended refactor.
r10485 #-----------------------------------------------------------------------------
Jonathan Frederic
Finished a rough draft of the exporters.
r10588
Jonathan Frederic
Docstring decorator
r10771 def DocDecorator(f):
Jonathan Frederic
Finished rename/refact on API namespace
r10690
Jonathan Frederic
Docstring decorator
r10771 #Set docstring of function
f.__doc__ = f.__doc__ + """
nb : Notebook node
Jonathan Frederic
Finished rename/refact on API namespace
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
Docstring decorator
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
Fixing import logic.
r11088 __all__ = [
'export',
'export_sphinx_manual',
'export_sphinx_howto',
'export_basic_html',
'export_full_html',
'export_latex',
'export_markdown',
'export_python',
'export_python_armor',
'export_reveal',
'export_rst',
Paul Ivanov
added listing of known exporters on error
r11250 'export_by_name',
'get_export_names'
Brian E. Granger
Fixing import logic.
r11088 ]
Jonathan Frederic
Docstring decorator
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
Finished rename/refact on API namespace
r10690 """
Jonathan Frederic
Fixed all broken references, refactored some stuff here and there,...
r10624
#Check arguments
if exporter_type is None:
raise TypeError("Exporter is None")
Jonathan Frederic
Got RST exporting to work... Sort of.
r10626 elif not issubclass(exporter_type, Exporter):
Jonathan Frederic
Fixed all broken references, refactored some stuff here and there,...
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
Finished rename/refact on API namespace
r10690 exporter_instance = exporter_type(preprocessors=transformers,
jinja_filters=filters, config=config)
Jonathan Frederic
Fixed all broken references, refactored some stuff here and there,...
r10624
#Try to convert the notebook using the appropriate conversion function.
if isinstance(nb, NotebookNode):
Jonathan Frederic
Got RST exporting to work... Sort of.
r10626 output, resources = exporter_instance.from_notebook_node(nb)
elif isinstance(nb, basestring):
output, resources = exporter_instance.from_filename(nb)
Jonathan Frederic
Fixed all broken references, refactored some stuff here and there,...
r10624 else:
Jonathan Frederic
Got RST exporting to work... Sort of.
r10626 output, resources = exporter_instance.from_file(nb)
return output, resources, exporter_instance
Jonathan Frederic
Fixed all broken references, refactored some stuff here and there,...
r10624
Jonathan Frederic
Cleanup and refactor of API, almost complete....
r10677
Jonathan Frederic
Docstring decorator
r10771 @DocDecorator
Jonathan Frederic
Finished rename/refact on API namespace
r10690 def export_sphinx_manual(nb, config=None, transformers=None, filters=None):
"""
Export a notebook object to Sphinx Manual LaTeX
"""
Jonathan Frederic
Docstring decorator
r10771 return export(SphinxManualExporter, nb, config, transformers, filters)
Jonathan Frederic
Finished rename/refact on API namespace
r10690
Jonathan Frederic
Docstring decorator
r10771 @DocDecorator
Jonathan Frederic
Finished rename/refact on API namespace
r10690 def export_sphinx_howto(nb, config=None, transformers=None, filters=None):
"""
Export a notebook object to Sphinx HowTo LaTeX
"""
Jonathan Frederic
Docstring decorator
r10771 return export(SphinxHowtoExporter, nb, config, transformers, filters)
Jonathan Frederic
Finished rename/refact on API namespace
r10690
Jonathan Frederic
Docstring decorator
r10771 @DocDecorator
Jonathan Frederic
Finished rename/refact on API namespace
r10690 def export_basic_html(nb, config=None, transformers=None, filters=None):
"""
Export a notebook object to Basic HTML
"""
MinRK
fix HTML capitalization in exporter classes
r11108 return export(BasicHTMLExporter, nb, config, transformers, filters)
Jonathan Frederic
Finished rename/refact on API namespace
r10690
Jonathan Frederic
Docstring decorator
r10771 @DocDecorator
Jonathan Frederic
Finished rename/refact on API namespace
r10690 def export_full_html(nb, config=None, transformers=None, filters=None):
"""
Export a notebook object to Full HTML
"""
MinRK
fix HTML capitalization in exporter classes
r11108 return export(FullHTMLExporter, nb, config, transformers, filters)
Jonathan Frederic
Finished rename/refact on API namespace
r10690
Jonathan Frederic
Docstring decorator
r10771 @DocDecorator
Jonathan Frederic
Finished rename/refact on API namespace
r10690 def export_latex(nb, config=None, transformers=None, filters=None):
"""
Export a notebook object to LaTeX
"""
Jonathan Frederic
Docstring decorator
r10771 return export(LatexExporter, nb, config, transformers, filters)
Jonathan Frederic
Finished rename/refact on API namespace
r10690
Jonathan Frederic
Docstring decorator
r10771 @DocDecorator
Jonathan Frederic
Finished rename/refact on API namespace
r10690 def export_markdown(nb, config=None, transformers=None, filters=None):
"""
Export a notebook object to Markdown
"""
Jonathan Frederic
Docstring decorator
r10771 return export(MarkdownExporter, nb, config, transformers, filters)
Jonathan Frederic
Finished rename/refact on API namespace
r10690
Jonathan Frederic
Docstring decorator
r10771 @DocDecorator
Jonathan Frederic
Finished rename/refact on API namespace
r10690 def export_python(nb, config=None, transformers=None, filters=None):
"""
Export a notebook object to Python
"""
Jonathan Frederic
Docstring decorator
r10771 return export(PythonExporter, nb, config, transformers, filters)
Jonathan Frederic
Finished rename/refact on API namespace
r10690
Jonathan Frederic
Docstring decorator
r10771 @DocDecorator
Jonathan Frederic
Finished rename/refact on API namespace
r10690 def export_python_armor(nb, config=None, transformers=None, filters=None):
"""
Export a notebook object to Python (Armor)
"""
Jonathan Frederic
Docstring decorator
r10771 return export(PythonArmorExporter, nb, config, transformers, filters)
Jonathan Frederic
Finished rename/refact on API namespace
r10690
Jonathan Frederic
Docstring decorator
r10771 @DocDecorator
Jonathan Frederic
Finished rename/refact on API namespace
r10690 def export_reveal(nb, config=None, transformers=None, filters=None):
"""
Export a notebook object to Reveal
"""
Jonathan Frederic
Docstring decorator
r10771 return export(RevealExporter, nb, config, transformers, filters)
Jonathan Frederic
Finished rename/refact on API namespace
r10690
Jonathan Frederic
Docstring decorator
r10771 @DocDecorator
Jonathan Frederic
Finished rename/refact on API namespace
r10690 def export_rst(nb, config=None, transformers=None, filters=None):
"""
Export a notebook object to RST
"""
Jonathan Frederic
Docstring decorator
r10771 return export(RstExporter, nb, config, transformers, filters)
Jonathan Frederic
Post code-review, extended refactor.
r10485
Jonathan Frederic
Cleanup and refactor of API, almost complete....
r10677
Jonathan Frederic
Docstring decorator
r10771 @DocDecorator
def export_by_name(template_name, nb, config=None, transformers=None, filters=None):
Jonathan Frederic
Finished rename/refact on API namespace
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
Use globals dict to find right export function instead of...
r10769 function_name = "export_" + template_name.lower()
Jonathan Frederic
Finished rename/refact on API namespace
r10690
Jonathan Frederic
Use globals dict to find right export function instead of...
r10769 if function_name in globals():
return globals()[function_name](nb, config, transformers, filters)
else:
Paul Ivanov
more informative "template not found" message
r11249 raise NameError("template for `%s` not found" % function_name)
Matthias BUSSONNIER
pylint plus sphinx default to non-interactive.
r10875
Paul Ivanov
added listing of known exporters on error
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_')]
# filter out the one method that is not a template
l = [x for x in l if 'by_name' not in x]
return sorted(l)