##// END OF EJS Templates
Fixed, missing self.
Jonathan Frederic -
Show More
@@ -1,198 +1,198 b''
1 #!/usr/bin/env python
1 #!/usr/bin/env python
2 """NBConvert is a utility for conversion of IPYNB files.
2 """NBConvert is a utility for conversion of IPYNB files.
3
3
4 Commandline interface for the NBConvert conversion utility. Read the
4 Commandline interface for the NBConvert conversion utility. Read the
5 readme.rst for usage information
5 readme.rst for usage information
6 """
6 """
7 #-----------------------------------------------------------------------------
7 #-----------------------------------------------------------------------------
8 #Copyright (c) 2013, the IPython Development Team.
8 #Copyright (c) 2013, the IPython Development Team.
9 #
9 #
10 #Distributed under the terms of the Modified BSD License.
10 #Distributed under the terms of the Modified BSD License.
11 #
11 #
12 #The full license is in the file COPYING.txt, distributed with this software.
12 #The full license is in the file COPYING.txt, distributed with this software.
13 #-----------------------------------------------------------------------------
13 #-----------------------------------------------------------------------------
14
14
15 #-----------------------------------------------------------------------------
15 #-----------------------------------------------------------------------------
16 #Imports
16 #Imports
17 #-----------------------------------------------------------------------------
17 #-----------------------------------------------------------------------------
18
18
19 #Stdlib imports
19 #Stdlib imports
20 from __future__ import print_function
20 from __future__ import print_function
21 import sys
21 import sys
22 import os
22 import os
23 import glob
23 import glob
24
24
25 #From IPython
25 #From IPython
26 from IPython.core.application import BaseIPythonApplication
26 from IPython.core.application import BaseIPythonApplication
27 from IPython.config.application import catch_config_error
27 from IPython.config.application import catch_config_error
28 from IPython.utils.traitlets import Unicode, List, Instance, DottedObjectName, Type
28 from IPython.utils.traitlets import Unicode, List, Instance, DottedObjectName, Type
29 from IPython.utils.importstring import import_item
29 from IPython.utils.importstring import import_item
30
30
31 from .exporters.export import export_by_name, get_export_names, ExporterNameError
31 from .exporters.export import export_by_name, get_export_names, ExporterNameError
32 from .exporters.exporter import Exporter
32 from .exporters.exporter import Exporter
33 from .writers.base import WriterBase
33 from .writers.base import WriterBase
34 from .utils.config import GlobalConfigurable
34 from .utils.config import GlobalConfigurable
35
35
36 #-----------------------------------------------------------------------------
36 #-----------------------------------------------------------------------------
37 #Classes and functions
37 #Classes and functions
38 #-----------------------------------------------------------------------------
38 #-----------------------------------------------------------------------------
39
39
40 class NbConvertApp(BaseIPythonApplication):
40 class NbConvertApp(BaseIPythonApplication):
41 """Application used to convert to and from notebook file type (*.ipynb)"""
41 """Application used to convert to and from notebook file type (*.ipynb)"""
42
42
43
43
44 description = Unicode(
44 description = Unicode(
45 u"""This application is used to convert notebook files (*.ipynb).
45 u"""This application is used to convert notebook files (*.ipynb).
46 An ipython config file can be used to batch convert notebooks in the
46 An ipython config file can be used to batch convert notebooks in the
47 current directory.""")
47 current directory.""")
48
48
49 examples = Unicode(u"""
49 examples = Unicode(u"""
50 Running `ipython nbconvert` will read the directory config file and then
50 Running `ipython nbconvert` will read the directory config file and then
51 apply it to one or more notebooks.
51 apply it to one or more notebooks.
52
52
53 Multiple notebooks can be given at the command line in a couple of
53 Multiple notebooks can be given at the command line in a couple of
54 different ways:
54 different ways:
55
55
56 > ipython nbconvert notebook*.ipynb
56 > ipython nbconvert notebook*.ipynb
57 > ipython nbconvert notebook1.ipynb notebook2.ipynb
57 > ipython nbconvert notebook1.ipynb notebook2.ipynb
58 > ipython nbconvert # this will use the config file to fill in the notebooks
58 > ipython nbconvert # this will use the config file to fill in the notebooks
59 """)
59 """)
60
60
61 config_file_name = Unicode(u'ipython_nbconvert_config.py')
61 config_file_name = Unicode(u'ipython_nbconvert_config.py')
62
62
63 #Writer specific variables
63 #Writer specific variables
64 writer = Instance('IPython.nbconvert.writers.base.WriterBase',
64 writer = Instance('IPython.nbconvert.writers.base.WriterBase',
65 help="""Instance of the writer class used to write the
65 help="""Instance of the writer class used to write the
66 results of the conversion.""")
66 results of the conversion.""")
67 writer_class = DottedObjectName('FilesWriter', config=True,
67 writer_class = DottedObjectName('FilesWriter', config=True,
68 help="""Writer class used to write the
68 help="""Writer class used to write the
69 results of the conversion""")
69 results of the conversion""")
70 writer_aliases = {'FilesWriter': 'IPython.nbconvert.writers.files.FilesWriter',
70 writer_aliases = {'FilesWriter': 'IPython.nbconvert.writers.files.FilesWriter',
71 'DebugWriter': 'IPython.nbconvert.writers.debug.DebugWriter',
71 'DebugWriter': 'IPython.nbconvert.writers.debug.DebugWriter',
72 'StdoutWriter': 'IPython.nbconvert.writers.stdout.StdoutWriter'}
72 'StdoutWriter': 'IPython.nbconvert.writers.stdout.StdoutWriter'}
73 writer_factory = Type()
73 writer_factory = Type()
74
74
75 def _writer_class_changed(self, name, old, new):
75 def _writer_class_changed(self, name, old, new):
76 if new in self.writer_aliases:
76 if new in self.writer_aliases:
77 new = self.writer_aliases[new]
77 new = self.writer_aliases[new]
78 self.writer_factory = import_item(new)
78 self.writer_factory = import_item(new)
79
79
80
80
81 #Other configurable variables
81 #Other configurable variables
82 export_format = Unicode(
82 export_format = Unicode(
83 "", config=True,
83 "", config=True,
84 help="""If specified, nbconvert will convert the document(s) specified
84 help="""If specified, nbconvert will convert the document(s) specified
85 using this format.""")
85 using this format.""")
86
86
87 notebooks = List([], config=True, help="""List of notebooks to convert.
87 notebooks = List([], config=True, help="""List of notebooks to convert.
88 Search patterns are supported.""")
88 Search patterns are supported.""")
89
89
90 nbconvert_aliases = {'format':'NbConvertApp.export_format',
90 nbconvert_aliases = {'format':'NbConvertApp.export_format',
91 'notebooks':'NbConvertApp.notebooks',
91 'notebooks':'NbConvertApp.notebooks',
92 'writer':'NbConvertApp.writer_class'}
92 'writer':'NbConvertApp.writer_class'}
93
93
94
94
95 @catch_config_error
95 @catch_config_error
96 def initialize(self, argv=None):
96 def initialize(self, argv=None):
97 self.aliases.update(nbconvert_aliases)
97 self.aliases.update(self.nbconvert_aliases)
98
98
99 super(NbConvertApp, self).initialize(argv)
99 super(NbConvertApp, self).initialize(argv)
100
100
101 #Register class here to have help with help all
101 #Register class here to have help with help all
102 self.classes.insert(0, Exporter)
102 self.classes.insert(0, Exporter)
103 self.classes.insert(0, WriterBase)
103 self.classes.insert(0, WriterBase)
104 self.classes.insert(0, GlobalConfigurable)
104 self.classes.insert(0, GlobalConfigurable)
105
105
106 #Init
106 #Init
107 self.init_config(self.extra_args)
107 self.init_config(self.extra_args)
108 self.init_writer()
108 self.init_writer()
109
109
110
110
111 def init_config(self, extra_args):
111 def init_config(self, extra_args):
112 """
112 """
113 Add notebooks to the config if needed. Glob each notebook to replace
113 Add notebooks to the config if needed. Glob each notebook to replace
114 notebook patterns with filenames.
114 notebook patterns with filenames.
115 """
115 """
116
116
117 #Get any additional notebook patterns from the commandline
117 #Get any additional notebook patterns from the commandline
118 if len(extra_args) > 0:
118 if len(extra_args) > 0:
119 for pattern in extra_args:
119 for pattern in extra_args:
120 self.notebooks.append(pattern)
120 self.notebooks.append(pattern)
121
121
122 #Use glob to replace all the notebook patterns with filenames.
122 #Use glob to replace all the notebook patterns with filenames.
123 filenames = []
123 filenames = []
124 for pattern in self.notebooks:
124 for pattern in self.notebooks:
125 for filename in glob.glob(pattern):
125 for filename in glob.glob(pattern):
126 if not filename in filenames:
126 if not filename in filenames:
127 filenames.append(filename)
127 filenames.append(filename)
128 self.notebooks = filenames
128 self.notebooks = filenames
129
129
130
130
131 def init_writer(self):
131 def init_writer(self):
132 """
132 """
133 Initialize the writer (which is stateless)
133 Initialize the writer (which is stateless)
134 """
134 """
135 self._writer_class_changed(None, self.writer_class, self.writer_class)
135 self._writer_class_changed(None, self.writer_class, self.writer_class)
136 self.writer = self.writer_factory(parent=self)
136 self.writer = self.writer_factory(parent=self)
137
137
138
138
139 def start(self, argv=None):
139 def start(self, argv=None):
140 """
140 """
141 Ran after initiialization completed
141 Ran after initiialization completed
142 """
142 """
143 super(NbConvertApp, self).start()
143 super(NbConvertApp, self).start()
144 self.convert_notebooks()
144 self.convert_notebooks()
145
145
146
146
147 def convert_notebooks(self):
147 def convert_notebooks(self):
148 """
148 """
149 Convert the notebooks in the self.notebook traitlet
149 Convert the notebooks in the self.notebook traitlet
150 """
150 """
151 #Export each notebook
151 #Export each notebook
152 conversion_success = 0
152 conversion_success = 0
153 for notebook_filename in self.notebooks:
153 for notebook_filename in self.notebooks:
154
154
155 #Get a unique key for the notebook and set it in the resources object.
155 #Get a unique key for the notebook and set it in the resources object.
156 basename = os.path.basename(notebook_filename)
156 basename = os.path.basename(notebook_filename)
157 notebook_name = basename[:basename.rfind('.')]
157 notebook_name = basename[:basename.rfind('.')]
158 resources = {}
158 resources = {}
159 resources['unique_key'] = notebook_name
159 resources['unique_key'] = notebook_name
160
160
161 #Try to export
161 #Try to export
162 try:
162 try:
163 output, resources = export_by_name(self.export_format,
163 output, resources = export_by_name(self.export_format,
164 notebook_filename,
164 notebook_filename,
165 resources=resources,
165 resources=resources,
166 config=self.config)
166 config=self.config)
167 except ExporterNameError as e:
167 except ExporterNameError as e:
168 print("Error: '%s' exporter not found." % self.export_format,
168 print("Error: '%s' exporter not found." % self.export_format,
169 file=sys.stderr)
169 file=sys.stderr)
170 print("Known exporters are:",
170 print("Known exporters are:",
171 "\n\t" + "\n\t".join(get_export_names()),
171 "\n\t" + "\n\t".join(get_export_names()),
172 file=sys.stderr)
172 file=sys.stderr)
173 sys.exit(-1)
173 sys.exit(-1)
174 #except Exception as e:
174 #except Exception as e:
175 #print("Error: could not export '%s'" % notebook_filename, file=sys.stderr)
175 #print("Error: could not export '%s'" % notebook_filename, file=sys.stderr)
176 #print(e, file=sys.stderr)
176 #print(e, file=sys.stderr)
177 else:
177 else:
178 self.writer.write(output, resources, notebook_name=notebook_name)
178 self.writer.write(output, resources, notebook_name=notebook_name)
179 conversion_success += 1
179 conversion_success += 1
180
180
181 #If nothing was converted successfully, help the user.
181 #If nothing was converted successfully, help the user.
182 if conversion_success == 0:
182 if conversion_success == 0:
183
183
184 #No notebooks were specified, show help.
184 #No notebooks were specified, show help.
185 if len(self.notebooks) == 0:
185 if len(self.notebooks) == 0:
186 self.print_help()
186 self.print_help()
187
187
188 #Notebooks were specified, but not converted successfully. Show how
188 #Notebooks were specified, but not converted successfully. Show how
189 #to access help.
189 #to access help.
190 else:
190 else:
191 print('For help, use "ipython nbconvert --help"')
191 print('For help, use "ipython nbconvert --help"')
192
192
193
193
194 #-----------------------------------------------------------------------------
194 #-----------------------------------------------------------------------------
195 # Main entry point
195 # Main entry point
196 #-----------------------------------------------------------------------------
196 #-----------------------------------------------------------------------------
197
197
198 launch_new_instance = NbConvertApp.launch_instance
198 launch_new_instance = NbConvertApp.launch_instance
General Comments 0
You need to be logged in to leave comments. Login now