##// END OF EJS Templates
Merge pull request #3521 from jdfreder/nbconvert_exceptionfix...
Matthias Bussonnier -
r11161:29a017c4 merge
parent child Browse files
Show More
@@ -1,225 +1,225
1 """
1 """
2 Module containing single call export functions.
2 Module containing single call export functions.
3 """
3 """
4 #-----------------------------------------------------------------------------
4 #-----------------------------------------------------------------------------
5 # Copyright (c) 2013, the IPython Development Team.
5 # Copyright (c) 2013, the IPython Development Team.
6 #
6 #
7 # Distributed under the terms of the Modified BSD License.
7 # Distributed under the terms of the Modified BSD License.
8 #
8 #
9 # The full license is in the file COPYING.txt, distributed with this software.
9 # The full license is in the file COPYING.txt, distributed with this software.
10 #-----------------------------------------------------------------------------
10 #-----------------------------------------------------------------------------
11
11
12 #-----------------------------------------------------------------------------
12 #-----------------------------------------------------------------------------
13 # Imports
13 # Imports
14 #-----------------------------------------------------------------------------
14 #-----------------------------------------------------------------------------
15
15
16 from functools import wraps
16 from functools import wraps
17
17
18 from IPython.nbformat.v3.nbbase import NotebookNode
18 from IPython.nbformat.v3.nbbase import NotebookNode
19
19
20 from .exporter import Exporter
20 from .exporter import Exporter
21 from .basichtml import BasicHTMLExporter
21 from .basichtml import BasicHTMLExporter
22 from .fullhtml import FullHTMLExporter
22 from .fullhtml import FullHTMLExporter
23 from .latex import LatexExporter
23 from .latex import LatexExporter
24 from .markdown import MarkdownExporter
24 from .markdown import MarkdownExporter
25 from .python import PythonExporter
25 from .python import PythonExporter
26 from .python_armor import PythonArmorExporter
26 from .python_armor import PythonArmorExporter
27 from .reveal import RevealExporter
27 from .reveal import RevealExporter
28 from .rst import RstExporter
28 from .rst import RstExporter
29 from .sphinx_howto import SphinxHowtoExporter
29 from .sphinx_howto import SphinxHowtoExporter
30 from .sphinx_manual import SphinxManualExporter
30 from .sphinx_manual import SphinxManualExporter
31
31
32 #-----------------------------------------------------------------------------
32 #-----------------------------------------------------------------------------
33 # Classes
33 # Classes
34 #-----------------------------------------------------------------------------
34 #-----------------------------------------------------------------------------
35
35
36 def DocDecorator(f):
36 def DocDecorator(f):
37
37
38 #Set docstring of function
38 #Set docstring of function
39 f.__doc__ = f.__doc__ + """
39 f.__doc__ = f.__doc__ + """
40 nb : Notebook node
40 nb : Notebook node
41 config : config
41 config : config
42 User configuration instance.
42 User configuration instance.
43 transformers : list[of transformer]
43 transformers : list[of transformer]
44 Custom transformers to apply to the notebook prior to engaging
44 Custom transformers to apply to the notebook prior to engaging
45 the Jinja template engine. Any transformers specified here
45 the Jinja template engine. Any transformers specified here
46 will override existing transformers if a naming conflict
46 will override existing transformers if a naming conflict
47 occurs.
47 occurs.
48 filters : list[of filter]
48 filters : list[of filter]
49 Custom filters to make accessible to the Jinja templates. Any
49 Custom filters to make accessible to the Jinja templates. Any
50 filters specified here will override existing filters if a
50 filters specified here will override existing filters if a
51 naming conflict occurs.
51 naming conflict occurs.
52
52
53 Returns
53 Returns
54 ----------
54 ----------
55 tuple- output, resources, exporter_instance
55 tuple- output, resources, exporter_instance
56 output : str
56 output : str
57 Jinja 2 output. This is the resulting converted notebook.
57 Jinja 2 output. This is the resulting converted notebook.
58 resources : dictionary
58 resources : dictionary
59 Dictionary of resources used prior to and during the conversion
59 Dictionary of resources used prior to and during the conversion
60 process.
60 process.
61 exporter_instance : Exporter
61 exporter_instance : Exporter
62 Instance of the Exporter class used to export the document. Useful
62 Instance of the Exporter class used to export the document. Useful
63 to caller because it provides a 'file_extension' property which
63 to caller because it provides a 'file_extension' property which
64 specifies what extension the output should be saved as."""
64 specifies what extension the output should be saved as."""
65
65
66 @wraps(f)
66 @wraps(f)
67 def decorator(*args, **kwargs):
67 def decorator(*args, **kwargs):
68 return f(*args, **kwargs)
68 return f(*args, **kwargs)
69
69
70 return decorator
70 return decorator
71
71
72
72
73 #-----------------------------------------------------------------------------
73 #-----------------------------------------------------------------------------
74 # Functions
74 # Functions
75 #-----------------------------------------------------------------------------
75 #-----------------------------------------------------------------------------
76
76
77 __all__ = [
77 __all__ = [
78 'export',
78 'export',
79 'export_sphinx_manual',
79 'export_sphinx_manual',
80 'export_sphinx_howto',
80 'export_sphinx_howto',
81 'export_basic_html',
81 'export_basic_html',
82 'export_full_html',
82 'export_full_html',
83 'export_latex',
83 'export_latex',
84 'export_markdown',
84 'export_markdown',
85 'export_python',
85 'export_python',
86 'export_python_armor',
86 'export_python_armor',
87 'export_reveal',
87 'export_reveal',
88 'export_rst',
88 'export_rst',
89 'export_by_name'
89 'export_by_name'
90 ]
90 ]
91
91
92 @DocDecorator
92 @DocDecorator
93 def export(exporter_type, nb, config=None, transformers=None, filters=None):
93 def export(exporter_type, nb, config=None, transformers=None, filters=None):
94 """
94 """
95 Export a notebook object using specific exporter class.
95 Export a notebook object using specific exporter class.
96
96
97 exporter_type : Exporter class type
97 exporter_type : Exporter class type
98 Class type of the exporter that should be used. This method
98 Class type of the exporter that should be used. This method
99 will initialize it's own instance of the class. It is
99 will initialize it's own instance of the class. It is
100 ASSUMED that the class type provided exposes a
100 ASSUMED that the class type provided exposes a
101 constructor (__init__) with the same signature as the
101 constructor (__init__) with the same signature as the
102 base Exporter class.}
102 base Exporter class.}
103 """
103 """
104
104
105 #Check arguments
105 #Check arguments
106 if exporter_type is None:
106 if exporter_type is None:
107 raise TypeError("Exporter is None")
107 raise TypeError("Exporter is None")
108 elif not issubclass(exporter_type, Exporter):
108 elif not issubclass(exporter_type, Exporter):
109 raise TypeError("Exporter type does not inherit from Exporter (base)")
109 raise TypeError("Exporter type does not inherit from Exporter (base)")
110
110
111 if nb is None:
111 if nb is None:
112 raise TypeError("nb is None")
112 raise TypeError("nb is None")
113
113
114 #Create the exporter
114 #Create the exporter
115 exporter_instance = exporter_type(preprocessors=transformers,
115 exporter_instance = exporter_type(preprocessors=transformers,
116 jinja_filters=filters, config=config)
116 jinja_filters=filters, config=config)
117
117
118 #Try to convert the notebook using the appropriate conversion function.
118 #Try to convert the notebook using the appropriate conversion function.
119 if isinstance(nb, NotebookNode):
119 if isinstance(nb, NotebookNode):
120 output, resources = exporter_instance.from_notebook_node(nb)
120 output, resources = exporter_instance.from_notebook_node(nb)
121 elif isinstance(nb, basestring):
121 elif isinstance(nb, basestring):
122 output, resources = exporter_instance.from_filename(nb)
122 output, resources = exporter_instance.from_filename(nb)
123 else:
123 else:
124 output, resources = exporter_instance.from_file(nb)
124 output, resources = exporter_instance.from_file(nb)
125 return output, resources, exporter_instance
125 return output, resources, exporter_instance
126
126
127
127
128 @DocDecorator
128 @DocDecorator
129 def export_sphinx_manual(nb, config=None, transformers=None, filters=None):
129 def export_sphinx_manual(nb, config=None, transformers=None, filters=None):
130 """
130 """
131 Export a notebook object to Sphinx Manual LaTeX
131 Export a notebook object to Sphinx Manual LaTeX
132 """
132 """
133 return export(SphinxManualExporter, nb, config, transformers, filters)
133 return export(SphinxManualExporter, nb, config, transformers, filters)
134
134
135
135
136 @DocDecorator
136 @DocDecorator
137 def export_sphinx_howto(nb, config=None, transformers=None, filters=None):
137 def export_sphinx_howto(nb, config=None, transformers=None, filters=None):
138 """
138 """
139 Export a notebook object to Sphinx HowTo LaTeX
139 Export a notebook object to Sphinx HowTo LaTeX
140 """
140 """
141 return export(SphinxHowtoExporter, nb, config, transformers, filters)
141 return export(SphinxHowtoExporter, nb, config, transformers, filters)
142
142
143
143
144 @DocDecorator
144 @DocDecorator
145 def export_basic_html(nb, config=None, transformers=None, filters=None):
145 def export_basic_html(nb, config=None, transformers=None, filters=None):
146 """
146 """
147 Export a notebook object to Basic HTML
147 Export a notebook object to Basic HTML
148 """
148 """
149 return export(BasicHTMLExporter, nb, config, transformers, filters)
149 return export(BasicHTMLExporter, nb, config, transformers, filters)
150
150
151
151
152 @DocDecorator
152 @DocDecorator
153 def export_full_html(nb, config=None, transformers=None, filters=None):
153 def export_full_html(nb, config=None, transformers=None, filters=None):
154 """
154 """
155 Export a notebook object to Full HTML
155 Export a notebook object to Full HTML
156 """
156 """
157 return export(FullHTMLExporter, nb, config, transformers, filters)
157 return export(FullHTMLExporter, nb, config, transformers, filters)
158
158
159
159
160 @DocDecorator
160 @DocDecorator
161 def export_latex(nb, config=None, transformers=None, filters=None):
161 def export_latex(nb, config=None, transformers=None, filters=None):
162 """
162 """
163 Export a notebook object to LaTeX
163 Export a notebook object to LaTeX
164 """
164 """
165 return export(LatexExporter, nb, config, transformers, filters)
165 return export(LatexExporter, nb, config, transformers, filters)
166
166
167
167
168 @DocDecorator
168 @DocDecorator
169 def export_markdown(nb, config=None, transformers=None, filters=None):
169 def export_markdown(nb, config=None, transformers=None, filters=None):
170 """
170 """
171 Export a notebook object to Markdown
171 Export a notebook object to Markdown
172 """
172 """
173 return export(MarkdownExporter, nb, config, transformers, filters)
173 return export(MarkdownExporter, nb, config, transformers, filters)
174
174
175
175
176 @DocDecorator
176 @DocDecorator
177 def export_python(nb, config=None, transformers=None, filters=None):
177 def export_python(nb, config=None, transformers=None, filters=None):
178 """
178 """
179 Export a notebook object to Python
179 Export a notebook object to Python
180 """
180 """
181 return export(PythonExporter, nb, config, transformers, filters)
181 return export(PythonExporter, nb, config, transformers, filters)
182
182
183
183
184 @DocDecorator
184 @DocDecorator
185 def export_python_armor(nb, config=None, transformers=None, filters=None):
185 def export_python_armor(nb, config=None, transformers=None, filters=None):
186 """
186 """
187 Export a notebook object to Python (Armor)
187 Export a notebook object to Python (Armor)
188 """
188 """
189 return export(PythonArmorExporter, nb, config, transformers, filters)
189 return export(PythonArmorExporter, nb, config, transformers, filters)
190
190
191
191
192 @DocDecorator
192 @DocDecorator
193 def export_reveal(nb, config=None, transformers=None, filters=None):
193 def export_reveal(nb, config=None, transformers=None, filters=None):
194 """
194 """
195 Export a notebook object to Reveal
195 Export a notebook object to Reveal
196 """
196 """
197 return export(RevealExporter, nb, config, transformers, filters)
197 return export(RevealExporter, nb, config, transformers, filters)
198
198
199
199
200 @DocDecorator
200 @DocDecorator
201 def export_rst(nb, config=None, transformers=None, filters=None):
201 def export_rst(nb, config=None, transformers=None, filters=None):
202 """
202 """
203 Export a notebook object to RST
203 Export a notebook object to RST
204 """
204 """
205 return export(RstExporter, nb, config, transformers, filters)
205 return export(RstExporter, nb, config, transformers, filters)
206
206
207
207
208 @DocDecorator
208 @DocDecorator
209 def export_by_name(template_name, nb, config=None, transformers=None, filters=None):
209 def export_by_name(template_name, nb, config=None, transformers=None, filters=None):
210 """
210 """
211 Export a notebook object to a template type by its name. Reflection
211 Export a notebook object to a template type by its name. Reflection
212 (Inspect) is used to find the template's corresponding explicit export
212 (Inspect) is used to find the template's corresponding explicit export
213 method defined in this module. That method is then called directly.
213 method defined in this module. That method is then called directly.
214
214
215 template_name : str
215 template_name : str
216 Name of the template style to export to.
216 Name of the template style to export to.
217 """
217 """
218
218
219 function_name = "export_" + template_name.lower()
219 function_name = "export_" + template_name.lower()
220
220
221 if function_name in globals():
221 if function_name in globals():
222 return globals()[function_name](nb, config, transformers, filters)
222 return globals()[function_name](nb, config, transformers, filters)
223 else:
223 else:
224 return None
224 raise NameError("template not found")
225
225
General Comments 0
You need to be logged in to leave comments. Login now