123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- """Base class for preprocessors"""
- # Copyright (c) IPython Development Team.
- # Distributed under the terms of the Modified BSD License.
- from ..utils.base import NbConvertBase
- from traitlets import Bool
- class Preprocessor(NbConvertBase):
- """ A configurable preprocessor
- Inherit from this class if you wish to have configurability for your
- preprocessor.
- Any configurable traitlets this class exposed will be configurable in
- profiles using c.SubClassName.attribute = value
- you can overwrite :meth:`preprocess_cell` to apply a transformation
- independently on each cell or :meth:`preprocess` if you prefer your own
- logic. See corresponding docstring for information.
- Disabled by default and can be enabled via the config by
- 'c.YourPreprocessorName.enabled = True'
- """
-
- enabled = Bool(False).tag(config=True)
- def __init__(self, **kw):
- """
- Public constructor
-
- Parameters
- ----------
- config : Config
- Configuration file structure
- `**kw`
- Additional keyword arguments passed to parent
- """
-
- super(Preprocessor, self).__init__(**kw)
- def __call__(self, nb, resources):
- if self.enabled:
- self.log.debug("Applying preprocessor: %s",
- self.__class__.__name__)
- return self.preprocess(nb, resources)
- else:
- return nb, resources
- def preprocess(self, nb, resources):
- """
- Preprocessing to apply on each notebook.
-
- Must return modified nb, resources.
-
- If you wish to apply your preprocessing to each cell, you might want
- to override preprocess_cell method instead.
-
- Parameters
- ----------
- nb : NotebookNode
- Notebook being converted
- resources : dictionary
- Additional resources used in the conversion process. Allows
- preprocessors to pass variables into the Jinja engine.
- """
- for index, cell in enumerate(nb.cells):
- nb.cells[index], resources = self.preprocess_cell(cell, resources, index)
- return nb, resources
- def preprocess_cell(self, cell, resources, index):
- """
- Override if you want to apply some preprocessing to each cell.
- Must return modified cell and resource dictionary.
-
- 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
- """
- raise NotImplementedError('should be implemented by subclass')
- return cell, resources
|