| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- """Preprocessor for merging consecutive stream outputs for easier handling."""
- import re
- # Copyright (c) IPython Development Team.
- # Distributed under the terms of the Modified BSD License.
- from nbconvert.preprocessors import Preprocessor
- CR_PAT = re.compile(r".*\r(?=[^\n])")
- class CoalesceStreamsPreprocessor(Preprocessor):
- """
- Merge consecutive sequences of stream output into single stream
- to prevent extra newlines inserted at flush calls
- """
- def preprocess_cell(self, cell, resources, cell_index):
- """
- Apply a transformation on each cell. See base.py for details.
- """
- outputs = cell.get("outputs", [])
- if not outputs:
- return cell, resources
- last = outputs[0]
- new_outputs = [last]
- for output in outputs[1:]:
- if (
- output.output_type == "stream"
- and last.output_type == "stream"
- and last.name == output.name
- ):
- last.text += output.text
- else:
- new_outputs.append(output)
- last = output
- # process \r characters
- for output in new_outputs:
- if output.output_type == "stream" and "\r" in output.text:
- output.text = CR_PAT.sub("", output.text)
- cell.outputs = new_outputs
- return cell, resources
|