##// END OF EJS Templates
Do not create checkpoint_dir relative to current dir...
Do not create checkpoint_dir relative to current dir FileNotebookManager.create_checkpoint attempted to create checkpoint_dir relative to the current working directory, not the notebooks directory set in NotebookManager.notebook_dir. FileNotebookManager.get_checkpoint_path already creates checkpoint_dir. Fixed already in 19651d2, but this can be used as a small bugfix for 2.x, in case that is not being backported.

File last commit:

r16312:f944b4c9
r16987:44fb8569
Show More
coalescestreams.py
77 lines | 2.3 KiB | text/x-python | PythonLexer
"""Preprocessor for merging consecutive stream outputs for easier handling."""
# Copyright (c) IPython Development Team.
# Distributed under the terms of the Modified BSD License.
import re
def cell_preprocessor(function):
"""
Wrap a function to be executed on all cells of a notebook
The wrapped function should have these parameters:
cell : NotebookNode cell
Notebook cell being processed
resources : dictionary
Additional resources used in the conversion process. Allows
preprocessors to pass variables into the Jinja engine.
index : int
Index of the cell being processed
"""
def wrappedfunc(nb, resources):
from IPython.config import Application
if Application.initialized():
Application.instance().log.debug(
"Applying preprocessor: %s", function.__name__
)
for worksheet in nb.worksheets:
for index, cell in enumerate(worksheet.cells):
worksheet.cells[index], resources = function(cell, resources, index)
return nb, resources
return wrappedfunc
cr_pat = re.compile(r'.*\r(?=[^\n])')
@cell_preprocessor
def coalesce_streams(cell, resources, index):
"""
Merge consecutive sequences of stream output into single stream
to prevent extra newlines inserted at flush calls
Parameters
----------
cell : NotebookNode cell
Notebook cell being processed
resources : dictionary
Additional resources used in the conversion process. Allows
transformers to pass variables into the Jinja engine.
index : int
Index of the cell being processed
"""
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.stream == output.stream
):
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