You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ORPA-pyOpenRPA/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/nbconvert/preprocessors/tagremove.py

124 lines
4.6 KiB

"""
Module containing a preprocessor that removes cells if they match
one or more regular expression.
"""
# Copyright (c) IPython Development Team.
# Distributed under the terms of the Modified BSD License.
from traitlets import Set, Unicode
from .base import Preprocessor
class TagRemovePreprocessor(Preprocessor):
"""
Removes inputs, outputs, or cells from a notebook that
have tags that designate they are to be removed prior to exporting
the notebook.
remove_cell_tags
removes cells tagged with these values
remove_all_outputs_tags
removes entire output areas on cells
tagged with these values
remove_single_output_tags
removes individual output objects on
outputs tagged with these values
remove_input_tags
removes inputs tagged with these values
"""
remove_cell_tags = Set(Unicode(), default_value=[],
help=("Tags indicating which cells are to be removed,"
"matches tags in ``cell.metadata.tags``.")).tag(config=True)
remove_all_outputs_tags = Set(Unicode(), default_value=[],
help=("Tags indicating cells for which the outputs are to be removed,"
"matches tags in ``cell.metadata.tags``.")).tag(config=True)
remove_single_output_tags = Set(Unicode(), default_value=[],
help=("Tags indicating which individual outputs are to be removed,"
"matches output *i* tags in ``cell.outputs[i].metadata.tags``.")
).tag(config=True)
remove_input_tags = Set(Unicode(), default_value=[],
help=("Tags indicating cells for which input is to be removed,"
"matches tags in ``cell.metadata.tags``.")).tag(config=True)
remove_metadata_fields = Set(
{'collapsed', 'scrolled'}
).tag(config=True)
def check_cell_conditions(self, cell, resources, index):
"""
Checks that a cell has a tag that is to be removed
Returns: Boolean.
True means cell should *not* be removed.
"""
# Return true if any of the tags in the cell are removable.
return not self.remove_cell_tags.intersection(
cell.get('metadata', {}).get('tags', []))
def preprocess(self, nb, resources):
"""
Preprocessing to apply to each notebook. See base.py for details.
"""
# Skip preprocessing if the list of patterns is empty
if not any([self.remove_cell_tags,
self.remove_all_outputs_tags,
self.remove_single_output_tags,
self.remove_input_tags
]):
return nb, resources
# Filter out cells that meet the conditions
nb.cells = [self.preprocess_cell(cell, resources, index)[0]
for index, cell in enumerate(nb.cells)
if self.check_cell_conditions(cell, resources, index)]
return nb, resources
def preprocess_cell(self, cell, resources, cell_index):
"""
Apply a transformation on each cell. See base.py for details.
"""
if (self.remove_all_outputs_tags.intersection(
cell.get('metadata', {}).get('tags', []))
and cell.cell_type == 'code'):
cell.outputs = []
cell.execution_count = None
# Remove metadata associated with output
if 'metadata' in cell:
for field in self.remove_metadata_fields:
cell.metadata.pop(field, None)
if (self.remove_input_tags.intersection(
cell.get('metadata', {}).get('tags', []))):
cell.transient = {
'remove_source': True
}
if cell.get('outputs', []):
cell.outputs = [output
for output_index, output in enumerate(cell.outputs)
if self.check_output_conditions(output,
resources,
cell_index,
output_index)
]
return cell, resources
def check_output_conditions(self, output, resources,
cell_index, output_index):
"""
Checks that an output has a tag that indicates removal.
Returns: Boolean.
True means output should *not* be removed.
"""
return not self.remove_single_output_tags.intersection(
output.get('metadata', {}).get('tags', []))