From 9df5cb470286f54097b3b912e5ad11efee5d1969 2014-03-20 19:32:28 From: Min RK Date: 2014-03-20 19:32:28 Subject: [PATCH] Merge pull request #5387 from jdfreder/nbcoutputstream Respect '\r' characters in nbconvert. --- diff --git a/IPython/nbconvert/preprocessors/coalescestreams.py b/IPython/nbconvert/preprocessors/coalescestreams.py index 3fa4379..37fddd1 100644 --- a/IPython/nbconvert/preprocessors/coalescestreams.py +++ b/IPython/nbconvert/preprocessors/coalescestreams.py @@ -11,9 +11,13 @@ addition to the coalesce_streams pre-proccessor. #----------------------------------------------------------------------------- #----------------------------------------------------------------------------- -# Functions +# Imports #----------------------------------------------------------------------------- +import re +#----------------------------------------------------------------------------- +# Functions +#----------------------------------------------------------------------------- def cell_preprocessor(function): """ Wrap a function to be executed on all cells of a notebook @@ -67,6 +71,10 @@ def coalesce_streams(cell, resources, index): last.stream == output.stream ): last.text += output.text + + # Respect \r characters. + cr_pat = re.compile(r'.*\r(?=[^\n])') + last.text = cr_pat.sub('', last.text) else: new_outputs.append(output) last = output diff --git a/IPython/nbconvert/preprocessors/tests/test_coalescestreams.py b/IPython/nbconvert/preprocessors/tests/test_coalescestreams.py index fd9c14f..1df7e0e 100644 --- a/IPython/nbconvert/preprocessors/tests/test_coalescestreams.py +++ b/IPython/nbconvert/preprocessors/tests/test_coalescestreams.py @@ -13,7 +13,6 @@ Module with tests for the coalescestreams preprocessor #----------------------------------------------------------------------------- # Imports #----------------------------------------------------------------------------- - from IPython.nbformat import current as nbformat from .base import PreprocessorTestsBase @@ -23,7 +22,6 @@ from ..coalescestreams import coalesce_streams #----------------------------------------------------------------------------- # Class #----------------------------------------------------------------------------- - class TestCoalesceStreams(PreprocessorTestsBase): """Contains test functions for coalescestreams.py""" @@ -38,10 +36,8 @@ class TestCoalesceStreams(PreprocessorTestsBase): self.assertEqual(outputs[2].text, "cd") self.assertEqual(outputs[3].text, "ef") - def test_coalesce_sequenced_streams(self): """Can the coalesce streams preprocessor merge a sequence of streams?""" - outputs = [nbformat.new_output(output_type="stream", stream="stdout", output_text="0"), nbformat.new_output(output_type="stream", stream="stdout", output_text="1"), nbformat.new_output(output_type="stream", stream="stdout", output_text="2"), @@ -58,3 +54,20 @@ class TestCoalesceStreams(PreprocessorTestsBase): nb, res = coalesce_streams(nb, res) outputs = nb.worksheets[0].cells[0].outputs self.assertEqual(outputs[0].text, u'01234567') + + def test_coalesce_replace_streams(self): + """Are \\r characters handled?""" + outputs = [nbformat.new_output(output_type="stream", stream="stdout", output_text="z"), + nbformat.new_output(output_type="stream", stream="stdout", output_text="\ra"), + nbformat.new_output(output_type="stream", stream="stdout", output_text="\nz\rb"), + nbformat.new_output(output_type="stream", stream="stdout", output_text="\nz"), + nbformat.new_output(output_type="stream", stream="stdout", output_text="\rc\n"), + nbformat.new_output(output_type="stream", stream="stdout", output_text="z\rz\rd")] + cells=[nbformat.new_code_cell(input="# None", prompt_number=1,outputs=outputs)] + worksheets = [nbformat.new_worksheet(name="worksheet1", cells=cells)] + + nb = nbformat.new_notebook(name="notebook1", worksheets=worksheets) + res = self.build_resources() + nb, res = coalesce_streams(nb, res) + outputs = nb.worksheets[0].cells[0].outputs + self.assertEqual(outputs[0].text, u'a\nb\nc\nd')