You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			46 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
"""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
 |