##// END OF EJS Templates
Merge pull request #4088 from jdfreder/coalfix...
Min RK -
r12334:31d73e5c merge
parent child Browse files
Show More
@@ -1,75 +1,75
1 1 """Module that allows latex output notebooks to be conditioned before
2 2 they are converted. Exposes a decorator (@cell_preprocessor) in
3 3 addition to the coalesce_streams pre-proccessor.
4 4 """
5 5 #-----------------------------------------------------------------------------
6 6 # Copyright (c) 2013, the IPython Development Team.
7 7 #
8 8 # Distributed under the terms of the Modified BSD License.
9 9 #
10 10 # The full license is in the file COPYING.txt, distributed with this software.
11 11 #-----------------------------------------------------------------------------
12 12
13 13 #-----------------------------------------------------------------------------
14 14 # Functions
15 15 #-----------------------------------------------------------------------------
16 16
17 17 def cell_preprocessor(function):
18 18 """
19 19 Wrap a function to be executed on all cells of a notebook
20 20
21 21 Wrapped Parameters
22 22 ----------
23 23 cell : NotebookNode cell
24 24 Notebook cell being processed
25 25 resources : dictionary
26 26 Additional resources used in the conversion process. Allows
27 27 preprocessors to pass variables into the Jinja engine.
28 28 index : int
29 29 Index of the cell being processed
30 30 """
31 31
32 32 def wrappedfunc(nb, resources):
33 33 for worksheet in nb.worksheets :
34 34 for index, cell in enumerate(worksheet.cells):
35 35 worksheet.cells[index], resources = function(cell, resources, index)
36 36 return nb, resources
37 37 return wrappedfunc
38 38
39 39
40 40 @cell_preprocessor
41 41 def coalesce_streams(cell, resources, index):
42 42 """
43 43 Merge consecutive sequences of stream output into single stream
44 44 to prevent extra newlines inserted at flush calls
45 45
46 46 Parameters
47 47 ----------
48 48 cell : NotebookNode cell
49 49 Notebook cell being processed
50 50 resources : dictionary
51 51 Additional resources used in the conversion process. Allows
52 52 transformers to pass variables into the Jinja engine.
53 53 index : int
54 54 Index of the cell being processed
55 55 """
56 56
57 57 outputs = cell.get('outputs', [])
58 58 if not outputs:
59 59 return cell, resources
60 60
61 61 last = outputs[0]
62 62 new_outputs = [last]
63 63
64 64 for output in outputs[1:]:
65 65 if (output.output_type == 'stream' and
66 66 last.output_type == 'stream' and
67 67 last.stream == output.stream
68 68 ):
69 69 last.text += output.text
70 70 else:
71 71 new_outputs.append(output)
72 last = output
72 last = output
73 73
74 74 cell.outputs = new_outputs
75 75 return cell, resources
@@ -1,38 +1,60
1 1 """
2 2 Module with tests for the coalescestreams preprocessor
3 3 """
4 4
5 5 #-----------------------------------------------------------------------------
6 6 # Copyright (c) 2013, the IPython Development Team.
7 7 #
8 8 # Distributed under the terms of the Modified BSD License.
9 9 #
10 10 # The full license is in the file COPYING.txt, distributed with this software.
11 11 #-----------------------------------------------------------------------------
12 12
13 13 #-----------------------------------------------------------------------------
14 14 # Imports
15 15 #-----------------------------------------------------------------------------
16 16
17 from IPython.nbformat import current as nbformat
18
17 19 from .base import PreprocessorTestsBase
18 20 from ..coalescestreams import coalesce_streams
19 21
20 22
21 23 #-----------------------------------------------------------------------------
22 24 # Class
23 25 #-----------------------------------------------------------------------------
24 26
25 27 class TestCoalesceStreams(PreprocessorTestsBase):
26 28 """Contains test functions for coalescestreams.py"""
27 29
28 30 def test_coalesce_streams(self):
29 31 """coalesce_streams preprocessor output test"""
30 32 nb = self.build_notebook()
31 33 res = self.build_resources()
32 34 nb, res = coalesce_streams(nb, res)
33 35 outputs = nb.worksheets[0].cells[0].outputs
34 36 self.assertEqual(outputs[0].text, "a")
35 37 self.assertEqual(outputs[1].output_type, "text")
36 38 self.assertEqual(outputs[2].text, "cd")
37 39 self.assertEqual(outputs[3].text, "ef")
38
40
41
42 def test_coalesce_sequenced_streams(self):
43 """Can the coalesce streams preprocessor merge a sequence of streams?"""
44
45 outputs = [nbformat.new_output(output_type="stream", stream="stdout", output_text="0"),
46 nbformat.new_output(output_type="stream", stream="stdout", output_text="1"),
47 nbformat.new_output(output_type="stream", stream="stdout", output_text="2"),
48 nbformat.new_output(output_type="stream", stream="stdout", output_text="3"),
49 nbformat.new_output(output_type="stream", stream="stdout", output_text="4"),
50 nbformat.new_output(output_type="stream", stream="stdout", output_text="5"),
51 nbformat.new_output(output_type="stream", stream="stdout", output_text="6"),
52 nbformat.new_output(output_type="stream", stream="stdout", output_text="7")]
53 cells=[nbformat.new_code_cell(input="# None", prompt_number=1,outputs=outputs)]
54 worksheets = [nbformat.new_worksheet(name="worksheet1", cells=cells)]
55
56 nb = nbformat.new_notebook(name="notebook1", worksheets=worksheets)
57 res = self.build_resources()
58 nb, res = coalesce_streams(nb, res)
59 outputs = nb.worksheets[0].cells[0].outputs
60 self.assertEqual(outputs[0].text, u'01234567')
General Comments 0
You need to be logged in to leave comments. Login now