##// END OF EJS Templates
Added writer classes
Jonathan Frederic -
Show More
@@ -0,0 +1,2
1 from .files import FilesWriter
2 from .stdout import StdoutWriter
@@ -0,0 +1,57
1 #!/usr/bin/env python
2 """
3 Contains writer base class.
4 """
5 #-----------------------------------------------------------------------------
6 #Copyright (c) 2013, the IPython Development Team.
7 #
8 #Distributed under the terms of the Modified BSD License.
9 #
10 #The full license is in the file COPYING.txt, distributed with this software.
11 #-----------------------------------------------------------------------------
12
13 #-----------------------------------------------------------------------------
14 # Imports
15 #-----------------------------------------------------------------------------
16
17 from IPython.utils.traitlets import List
18
19 from ..utils.config import GlobalConfigurable
20
21 #-----------------------------------------------------------------------------
22 # Classes
23 #-----------------------------------------------------------------------------
24
25 class WriterBase(GlobalConfigurable):
26 """Consumes output from nbconvert export...() methods and writes to a
27 useful location. """
28
29
30 files = List([], config=True, help="""
31 List of the files that the notebook references. Files will be
32 included with written output.""")
33
34
35 def __init__(self, config=None, **kw):
36 """
37 Constructor
38 """
39 super(WriterBase, self).__init__(config=config, **kw)
40
41
42 def write(self, output, resources, **kw):
43 """
44 Consume and write Jinja output.
45
46 Parameters
47 ----------
48 output : string
49 Conversion results. This string contains the file contents of the
50 converted file.
51 resources : dict
52 Resources created and filled by the nbconvert conversion process.
53 Includes output from transformers, such as the extract figure
54 transformer.
55 """
56
57 raise NotImplementedError()
@@ -0,0 +1,43
1 #!/usr/bin/env python
2 """
3 Contains debug writer.
4 """
5 #-----------------------------------------------------------------------------
6 #Copyright (c) 2013, the IPython Development Team.
7 #
8 #Distributed under the terms of the Modified BSD License.
9 #
10 #The full license is in the file COPYING.txt, distributed with this software.
11 #-----------------------------------------------------------------------------
12
13 #-----------------------------------------------------------------------------
14 # Imports
15 #-----------------------------------------------------------------------------
16
17 from .base import WriterBase
18 from pprint import pprint
19
20 #-----------------------------------------------------------------------------
21 # Classes
22 #-----------------------------------------------------------------------------
23
24 class DebugWriter(WriterBase):
25 """Consumes output from nbconvert export...() methods and writes usefull
26 debugging information to the stdout. The information includes a list of
27 resources that were extracted from the notebook(s) during export."""
28
29
30 def write(self, output, resources, **kw):
31 """
32 Consume and write Jinja output.
33
34 See base for more...
35 """
36
37 if 'figures' in resources:
38 print("Figures extracted from %s" % notebook_name)
39 print('-' * 80)
40 pprint.pprint(resources['figures'], indent=2, width=70)
41 else:
42 print("No figures extracted from %s" % notebook_name)
43 print('=' * 80)
@@ -0,0 +1,98
1 #!/usr/bin/env python
2 """
3 Contains writer for writing nbconvert output to filesystem.
4 """
5 #-----------------------------------------------------------------------------
6 #Copyright (c) 2013, the IPython Development Team.
7 #
8 #Distributed under the terms of the Modified BSD License.
9 #
10 #The full license is in the file COPYING.txt, distributed with this software.
11 #-----------------------------------------------------------------------------
12
13 #-----------------------------------------------------------------------------
14 # Imports
15 #-----------------------------------------------------------------------------
16
17 import io
18 import os
19 import shutil
20 import glob
21
22 from IPython.utils.traitlets import Unicode
23
24 from .base import WriterBase
25
26 #-----------------------------------------------------------------------------
27 # Classes
28 #-----------------------------------------------------------------------------
29
30 class FilesWriter(WriterBase):
31 """Consumes nbconvert output and produces files."""
32
33
34 build_directory = Unicode("nbconvert_build", config=True,
35 help="""Directory to write output to. Leave blank
36 to output to the current directory""")
37
38
39 #Make sure that the output directory exists.
40 def _build_directory_changed(self, name, old, new):
41 if new and not os.path.isdir(new):
42 os.makedirs(new)
43
44
45 def __init__(self, **kw):
46 super(FilesWriter, self).__init__(**kw)
47 self._build_directory_changed('build_directory', self.build_directory,
48 self.build_directory)
49
50
51 def write(self, output, resources, notebook_name=None, **kw):
52 """
53 Consume and write Jinja output to the file system. Output directory
54 is set via the 'build_directory' variable of this instance (a
55 configurable).
56
57 See base for more...
58 """
59
60 #Pull the extension from the resources dict.
61 output_extension = resources['output_extension']
62
63 #Write all of the extracted resources to the destination directory.
64 #NOTE: WE WRITE EVERYTHING AS-IF IT'S BINARY. THE EXTRACT FIG
65 #TRANSFORMER SHOULD HANDLE UNIX/WINDOWS LINE ENDINGS...
66 for filename, data in resources.get('figures', {}).items():
67
68 #Determine where to write the file to
69 dest = os.path.join(self.build_directory, filename)
70
71 #Write file
72 with io.open(dest, 'wb') as f:
73 f.write(data)
74
75 #Copy referenced files to output directory
76 if self.build_directory:
77 for filename in self.files:
78
79 #Copy files that match search pattern
80 for matching_filename in glob.glob(filename):
81
82 #Make sure folder exists.
83 dest = os.path.join(self.build_directory, filename)
84 path = os.path.dirname(dest)
85 if not os.path.isdir(path):
86 os.makedirs(path)
87
88 #Copy
89 shutil.copyfile(matching_filename, dest)
90
91 #Determine where to write conversion results.
92 dest = notebook_name + '.' + output_extension
93 if self.build_directory:
94 dest = os.path.join(self.build_directory, dest)
95
96 #Write conversion results.
97 with io.open(dest, 'w') as f:
98 f.write(output)
@@ -0,0 +1,37
1 #!/usr/bin/env python
2 """
3 Contains Stdout writer
4 """
5 #-----------------------------------------------------------------------------
6 #Copyright (c) 2013, the IPython Development Team.
7 #
8 #Distributed under the terms of the Modified BSD License.
9 #
10 #The full license is in the file COPYING.txt, distributed with this software.
11 #-----------------------------------------------------------------------------
12
13 #-----------------------------------------------------------------------------
14 # Imports
15 #-----------------------------------------------------------------------------
16
17 from .base import WriterBase
18
19 #-----------------------------------------------------------------------------
20 # Classes
21 #-----------------------------------------------------------------------------
22
23 class StdoutWriter(WriterBase):
24 """Consumes output from nbconvert export...() methods and writes to the
25 stdout stream. Allows for quick debuging of nbconvert output. Using the
26 debug flag makes the writer pretty-print the figures contained within the
27 notebook."""
28
29
30 def write(self, output, resources, **kw):
31 """
32 Consume and write Jinja output.
33
34 See base for more...
35 """
36
37 print(output)
General Comments 0
You need to be logged in to leave comments. Login now