Collection of pytest utils built on top of nbval
Project description
nbvalx
nbvalx is a collection of pytest
utils built on top of nbval
.
nbvalx is currently developed and maintained at Università Cattolica del Sacro Cuore by Dr. Francesco Ballarin.
nbvalx can be pip install
ed from its GitHub repository or from PyPI
Cell magics for conditional running based on tags
Add a cell with
%load_ext nbvalx
at the beginning of a notebook to load nbvalx IPython
extension. The extension is implemented in nbvalx/jupyter_magics.py
.
The extension allows to register a list of allowed tags
%register_run_if_allowed_tags tag1, tag2
and set the current value of the tag with
%register_run_if_current_tag tag1
The tag can then be used to conditionally run cells. As an example, if the subsequent two cells were
%%run_if tag1
current_tag = "tag1"
%%run_if tag2
current_tag = "tag2"
the first cell would never be executed, and the second cell would assign the value "tag2"
to current_tag
.
See tests/notebooks/data/tags
for a few simple notebooks using tags.
Custom pytest hooks for jupyter notebooks
The file nbvalx/pytest_hooks_notebooks.py
contains a few utility functions to be used in pytest configuration file for notebooks tests.
The pytest
hooks which can be customized in this way are:
pytest_addoption
,pytest_collect_file
,pytest_runtest_makereport
,pytest_runtest_setup
,pytest_runtest_teardown
, andpytest_sessionstart
.
For clarity, the hooks implemented in nbvalx/pytest_hooks_notebooks.py
do not have a pytest_
prefix, as it will be the user's responsability to pick them up and assign them to the corresponding pytest
hook in a custom conftest.py
, as show in tests/notebooks/conftest.py
.
The hooks change the default behavior of nbval
in the following ways:
- the options
--nbval
and--nbval-lax
, whichnbval
requires to pass explicitly, are here enabled implicitly; - support for
MPI
run by providing the--np
option topytest
. When runningpytest --np 2
, nbvalx will start aipyparallel.Cluster
and run notebooks tests in parallel on 2 cores. In the default case one core is employed, and anipyparallel.Cluster
is not started; - support for tags, as introduced in the previous section, as governed by two flags:
--tag-collapse
: if enabled (default), strip all cells for which the%%run_if
condition does not evaluate toTrue
. This may be used to prepare notebook files to be read by the end user, as stripping unused cells may improve the readability of the notebook. If not enabled, all cells will be kept.--ipynb-action
: eithercollect-notebooks
(default) orcreate-notebook
. Both actions create several copies of the original notebook that differ by the currently enabled tag. For instance, if the original notebook in the section above is callednotebook.ipynb
and has two allowed tags, the action will generate a filenotebook[tag1].ipynb
wheretag1
is assigned as the current value of the tag, and a filenotebook[tag2].ipynb
wheretag2
is assigned as the current value of the tag. Iftag-collapse
is enabled, cells associated to all remaining tags are stripped. Thecreate-notebook
action only generates the tagged notebooks; instead, thecollect-notebooks
additionally also runs them throughpytest
;
- support for collecting cell outputs to log files, which are saved in a work directory provided by the user with the argument
--work-dir
. This is helpful to debug failures while testing notebooks. If no work directory is specified, the default value isf".ipynb_pytest/np_{np}/collapse_{tag_collapse}"
; - the notebook is treated as if it were a demo or tutorial, rather than a collection of unit tests in different cells. For this reason, if a cell fails, the next cells will be skipped;
- a new
# PYTEST_XFAIL
marker is introduced to mark cells as expected to fail. The marker must be the first entry of the cell. A similar marker# PYTEST_XFAIL_AND_SKIP_NEXT
marks the cell as expected to fail and interrupts execution of the subsequent cells.
Custom pytest hooks for unit tests
The file nbvalx/pytest_unit_tests.py
contains a few utility functions to be used in pytest configuration file for notebooks tests.
The pytest
hooks which can be customized in this way are:
pytest_runtest_setup
, andpytest_runtest_teardown
.
For clarity, the hooks implemented in nbvalx/pytest_unit_tests.py
do not have a pytest_
prefix, as it will be the user's responsability to pick them up and assign them to the corresponding pytest
hook in a custom conftest.py
, as show in tests/unit/conftest.py
.
The hooks are typically employed to obtain a MPI
-parallel safe execution of python unit tests by calling garbage collection and putting a MPI
barrier after each test.
Custom pytest hooks for unit tests
The file nbvalx/tempfile.py
contains MPI
parallel-safe context managers to create temporary files and directories. Similarly to the tempfile
module in the standard library, the following context managers are provided:
nbvalx.tempfile.TemporaryDirectory
,nbvalx.tempfile.TemporaryFile
.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file nbvalx-0.1.0.tar.gz
.
File metadata
- Download URL: nbvalx-0.1.0.tar.gz
- Upload date:
- Size: 16.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 19383c1b4faebbad52860f34f977e4dd259977473f2bfb34ac8fcdb0ed77b8e2 |
|
MD5 | e24f07e64d8f17883f51dd97df674e18 |
|
BLAKE2b-256 | 714008d065c4e467b40d022ae1ba511205f623028b55f2ad60863b4ec4412bf7 |
File details
Details for the file nbvalx-0.1.0-py3-none-any.whl
.
File metadata
- Download URL: nbvalx-0.1.0-py3-none-any.whl
- Upload date:
- Size: 15.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | eef1abe842ba421e2a9847a497807125b888926eb4c39c47b5085c37d6ade299 |
|
MD5 | 484942f4503a3c984a62ba66db7603ca |
|
BLAKE2b-256 | 4ecb3984f5666c419b0edf592f3b2837a529b76254f5039dbdf30189fa0631b0 |