base.py
93 lines
| 2.9 KiB
| text/x-python
|
PythonLexer
MinRK
|
r16207 | """Base class for preprocessors""" | ||
Jonathan Frederic
|
r10674 | |||
MinRK
|
r16207 | # Copyright (c) IPython Development Team. | ||
# Distributed under the terms of the Modified BSD License. | ||||
Matthias BUSSONNIER
|
r9302 | |||
Jonathan Frederic
|
r11420 | from ..utils.base import NbConvertBase | ||
Jonathan Frederic
|
r11388 | from IPython.utils.traitlets import Bool | ||
Matthias BUSSONNIER
|
r9307 | |||
Jonathan Frederic
|
r10674 | |||
Paul Ivanov
|
r12219 | class Preprocessor(NbConvertBase): | ||
""" A configurable preprocessor | ||||
Matthias BUSSONNIER
|
r9528 | |||
Inherit from this class if you wish to have configurability for your | ||||
Paul Ivanov
|
r12219 | preprocessor. | ||
Matthias BUSSONNIER
|
r9528 | |||
Paul Ivanov
|
r12220 | Any configurable traitlets this class exposed will be configurable in | ||
MinRK
|
r16207 | profiles using c.SubClassName.attribute = value | ||
Matthias BUSSONNIER
|
r9528 | |||
Paul Ivanov
|
r12220 | 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 informations. | ||||
Jonathan Frederic
|
r11388 | |||
Disabled by default and can be enabled via the config by | ||||
Paul Ivanov
|
r12219 | 'c.YourPreprocessorName.enabled = True' | ||
Matthias BUSSONNIER
|
r9528 | """ | ||
Jonathan Frederic
|
r10772 | |||
Jonathan Frederic
|
r11382 | enabled = Bool(False, config=True) | ||
def __init__(self, **kw): | ||||
Jonathan Frederic
|
r10674 | """ | ||
Public constructor | ||||
Parameters | ||||
---------- | ||||
config : Config | ||||
Configuration file structure | ||||
**kw : misc | ||||
Additional arguments | ||||
""" | ||||
Paul Ivanov
|
r12219 | super(Preprocessor, self).__init__(**kw) | ||
Matthias BUSSONNIER
|
r9307 | |||
Jonathan Frederic
|
r10772 | |||
Jonathan Frederic
|
r10674 | def __call__(self, nb, resources): | ||
Jonathan Frederic
|
r11388 | if self.enabled: | ||
MinRK
|
r16207 | self.log.debug("Applying preprocessor: %s", self.__class__.__name__) | ||
Paul Ivanov
|
r12219 | return self.preprocess(nb,resources) | ||
Jonathan Frederic
|
r11388 | else: | ||
return nb, resources | ||||
Matthias BUSSONNIER
|
r10834 | |||
Paul Ivanov
|
r12219 | def preprocess(self, nb, resources): | ||
Jonathan Frederic
|
r10674 | """ | ||
Paul Ivanov
|
r12220 | Preprocessing to apply on each notebook. | ||
Jonathan Frederic
|
r10674 | |||
MinRK
|
r16207 | Must return modified nb, resources. | ||
Paul Ivanov
|
r12220 | If you wish to apply your preprocessing to each cell, you might want | ||
MinRK
|
r16207 | to override preprocess_cell method instead. | ||
Jonathan Frederic
|
r10674 | |||
Parameters | ||||
---------- | ||||
nb : NotebookNode | ||||
Notebook being converted | ||||
resources : dictionary | ||||
Additional resources used in the conversion process. Allows | ||||
Paul Ivanov
|
r12219 | preprocessors to pass variables into the Jinja engine. | ||
Matthias BUSSONNIER
|
r9528 | """ | ||
MinRK
|
r16207 | for worksheet in nb.worksheets: | ||
for index, cell in enumerate(worksheet.cells): | ||||
worksheet.cells[index], resources = self.preprocess_cell(cell, resources, index) | ||||
return nb, resources | ||||
Matthias BUSSONNIER
|
r9307 | |||
Matthias BUSSONNIER
|
r9528 | |||
Paul Ivanov
|
r12219 | def preprocess_cell(self, cell, resources, index): | ||
Jonathan Frederic
|
r10674 | """ | ||
MinRK
|
r16207 | Override if you want to apply some preprocessing to each cell. | ||
Must return modified cell and resource dictionary. | ||||
Jonathan Frederic
|
r10674 | |||
Parameters | ||||
---------- | ||||
cell : NotebookNode cell | ||||
Notebook cell being processed | ||||
resources : dictionary | ||||
Additional resources used in the conversion process. Allows | ||||
Paul Ivanov
|
r12219 | preprocessors to pass variables into the Jinja engine. | ||
Jonathan Frederic
|
r10674 | index : int | ||
Index of the cell being processed | ||||
Matthias BUSSONNIER
|
r9307 | """ | ||
Jonathan Frederic
|
r10485 | |||
Matthias BUSSONNIER
|
r9307 | raise NotImplementedError('should be implemented by subclass') | ||
Jonathan Frederic
|
r10674 | return cell, resources | ||
Matthias BUSSONNIER
|
r10834 | |||