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