{ "info": { "author": "Chris Sewell", "author_email": "chrisj_sewell@hotmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Framework :: Pytest", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Software Development :: Testing" ], "description": "# pytest-notebook\n\n[![CI Status](https://travis-ci.org/chrisjsewell/pytest-notebook.svg?branch=master)](https://travis-ci.org/chrisjsewell/pytest-notebook)\n[![Coverage](https://coveralls.io/repos/github/chrisjsewell/pytest-notebook/badge.svg?branch=master)](https://coveralls.io/github/chrisjsewell/pytest-notebook?branch=master)\n[![RTD](https://readthedocs.org/projects/pytest-notebook/badge)](http://pytest-notebook.readthedocs.io/)\n[![PyPI](https://img.shields.io/pypi/v/pytest-notebook.svg)](https://pypi.org/project/pytest-notebook)\n[![Conda](https://anaconda.org/conda-forge/pytest-notebook/badges/version.svg)](https://anaconda.org/conda-forge/pytest-notebook)\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/ambv/black)\n\nA [pytest](https://github.com/pytest-dev/pytest) plugin for regression testing and regenerating [Jupyter Notebooks](https://jupyter.org/).\n\n![Example Test](pytest-notebook-screenshot.png)\n\n------------------------------------------------------------------------\n\n## Purpose\n\nThe purpose of the plugin is to ensure that changes to the python\nenvironment (e.g. updating packages), have not affected the outputs\nof the notebook. If the notebook has changed, this plugin can also\nregenerate the notebooks, saving the new outputs.\n\n## Features\n\n- Recognise, collect, execute (optionally output) then diff input vs. output [Jupyter Notebooks](https://jupyter.org/).\n- Provides clear and colorized diffs of the notebooks (using [nbdime](https://nbdime.readthedocs.io))\n- Regenerate failing notebooks.\n- Integration with [coverage](https://coverage.readthedocs.io) and [pytest_cov](https://pytest-cov.readthedocs.io).\n\n- A well defined API allows notebook regression tests to be run:\n\n 1. Using the pytest test collection architecture.\n 2. As a pytest fixtures (`nb_regression.check(filename)`).\n 3. Using the `pytest_notebook` python package.\n\n- All stages are highly configurable *via*:\n\n 1. The pytest command-line interface.\n 2. The pytest configuration file.\n 3. The notebook and cell level metadata.\n\n- Post-processor plugin entry-points, allow for customisable modifications of the notebook,\n including source code formatting with [black](https://github.com/ambv/black)\n\n![Configuration Examples](docs/source/_static/collaged_in_out.png)\n\n## Installation\n\nTo install from [Conda](https://docs.conda.io) (recommended):\n\n```shell\n>> conda install -c conda-forge pytest-notebook\n```\n\nTo install *via* [pip](https://pypi.org/project/pip/) from [PyPI](https://pypi.org/project):\n\n```shell\n>> pip install pytest-notebook\n```\n\nTo install the development version:\n\n```shell\n>> git clone https://github.com/chrisjsewell/pytest-notebook .\n>> cd pytest-notebook\n>> pip install -e .\n>> # pip install -e .[code_style,testing,docs] # install extras for more features\n```\n\n## Usage\n\nSee the documentation at: http://pytest-notebook.readthedocs.io/\n\n## Contributing\n\nContributions are very welcome.\n\nThe following will discover and run all unit test:\n\n```shell\n>> pip install -e .[testing]\n>> pytest -v\n```\n\n### Coding Style Requirements\n\nThe code style is tested using [flake8](http://flake8.pycqa.org),\nwith the configuration set in `.flake8`,\nand code should be formatted with [black](https://github.com/ambv/black).\n\nInstalling with `pytest-notebook[code_style]` makes the [pre-commit](https://pre-commit.com/)\npackage available, which will ensure these tests are passed by reformatting the code\nand testing for lint errors before submitting a commit.\nIt can be setup by:\n\n```shell\n>> cd pytest-notebook\n>> pre-commit install\n```\n\nOptionally you can run `black` and `flake8` separately:\n\n```shell\n>> black .\n>> flake8 .\n```\n\nEditors like VS Code also have automatic code reformat utilities, which can adhere to this standard.\n\n## License\n\nDistributed under the terms of the [BSD-3](http://opensource.org/licenses/BSD-3-Clause) license,\n`pytest-notebook` is free and open source software.\n\n## Issues\n\nIf you encounter any problems, please [file an issue](https://github.com/chrisjsewell/pytest-notebook/issues) along with a detailed description.\n\n## Acknowledgements\n\n- [nbdime](https://nbdime.readthedocs.io)\n- [nbval](https://github.com/computationalmodelling/nbval)\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/chrisjsewell/pytest-notebook", "keywords": "", "license": "BSD-3", "maintainer": "Chris Sewell", "maintainer_email": "chrisj_sewell@hotmail.com", "name": "pytest-notebook", "package_url": "https://pypi.org/project/pytest-notebook/", "platform": "", "project_url": "https://pypi.org/project/pytest-notebook/", "project_urls": { "Homepage": "https://github.com/chrisjsewell/pytest-notebook" }, "release_url": "https://pypi.org/project/pytest-notebook/0.6.0/", "requires_dist": [ "pytest (>=3.5.0)", "attrs", "jupyter-client", "nbconvert", "nbdime", "nbformat", "jsonschema", "importlib-resources", "black ; extra == 'code_style'", "pre-commit (==1.17.0) ; extra == 'code_style'", "flake8 (<3.8.0,>=3.7.0) ; extra == 'code_style'", "doc8 (<0.9.0,>=0.8.0) ; extra == 'code_style'", "sphinx (>=1.6) ; extra == 'docs'", "sphinx-rtd-theme ; extra == 'docs'", "ipypublish (>=0.10.7) ; extra == 'docs'", "ruamel.yaml ; extra == 'docs'", "ruamel.yaml.clib ; extra == 'docs'", "coverage ; extra == 'docs'", "flake8-comprehensions ; extra == 'flake8_plugins'", "flake8-docstrings ; extra == 'flake8_plugins'", "flake8-builtins ; extra == 'flake8_plugins'", "import-order ; extra == 'flake8_plugins'", "coverage ; extra == 'testing'", "pytest-cov ; extra == 'testing'", "pytest-regressions ; extra == 'testing'", "black (==19.3b0) ; extra == 'testing'", "beautifulsoup4 (==4.8.0) ; extra == 'testing'" ], "requires_python": ">=3.5", "summary": "A pytest plugin for testing Jupyter Notebooks", "version": "0.6.0" }, "last_serial": 5672828, "releases": { "0.3.0": [ { "comment_text": "", "digests": { "md5": "ad404c20b40db0de5c40b0678a510cbf", "sha256": "26e93446ecd366513d4e8cce5dedce7e09d8e59ae864bddd2d71a7bd2b8a5ed1" }, "downloads": -1, "filename": "pytest_notebook-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "ad404c20b40db0de5c40b0678a510cbf", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 20423, "upload_time": "2019-08-10T14:19:37", "url": "https://files.pythonhosted.org/packages/af/e6/7697d21e0360ed0f186f1d8adfc6d9ffcc6699ab20b20a6da9ea5149fb96/pytest_notebook-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7287fe80b9d3f58826b11efec8593ecc", "sha256": "c3ca60c4b4f3a0a5ea9654fa850e28e9a1339e0d41d5ce8b6a793c00f37707b8" }, "downloads": -1, "filename": "pytest-notebook-0.3.0.tar.gz", "has_sig": false, "md5_digest": "7287fe80b9d3f58826b11efec8593ecc", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 25253, "upload_time": "2019-08-10T14:19:39", "url": "https://files.pythonhosted.org/packages/c6/69/73509233799053732e80c376e35904e4d9f6948453734577909b131c931c/pytest-notebook-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "ceaa9c0c4e1f274e35ff787fc16feceb", "sha256": "5469fb05f4a04fe03d2cb32afd611c34f6a1d7da4d2d4373e7b9beaccc113eb0" }, "downloads": -1, "filename": "pytest_notebook-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "ceaa9c0c4e1f274e35ff787fc16feceb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 20422, "upload_time": "2019-08-10T14:30:56", "url": "https://files.pythonhosted.org/packages/85/89/fc2069666c0cd2692c7f7c39f2888b639e0dd381c76608196187d4d22dfe/pytest_notebook-0.3.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9efef2769f85b11faa6b64def86852d4", "sha256": "c6117a4ca0ec404ac31c28a4baa21b4a3031f0a6d635efee023d46b20de15be3" }, "downloads": -1, "filename": "pytest-notebook-0.3.1.tar.gz", "has_sig": false, "md5_digest": "9efef2769f85b11faa6b64def86852d4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 170275, "upload_time": "2019-08-10T14:30:57", "url": "https://files.pythonhosted.org/packages/cd/f1/4b7032ae2d9fc1ca82fcdd8d7e32678d2278fa6aebfe9c4c24c2e7cc2556/pytest-notebook-0.3.1.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "a1ecab42de036fe72a057eb26a884c37", "sha256": "1bd36b944a6cc988da440c9f74aba5f113fbbec51915980d3e065b1ac0085cd2" }, "downloads": -1, "filename": "pytest_notebook-0.5.1-py3-none-any.whl", "has_sig": false, "md5_digest": "a1ecab42de036fe72a057eb26a884c37", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 32815, "upload_time": "2019-08-12T03:46:16", "url": "https://files.pythonhosted.org/packages/95/67/2db819d63dfc19448ae65a1275891eb76fc3b326d0077f3a3325f734a914/pytest_notebook-0.5.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "53db96f175a55f3b3cbff5b64e8e3434", "sha256": "b59345ae3a44330eac974f43ec75ed205bc40afcd9329171aba9ecad6e9c402f" }, "downloads": -1, "filename": "pytest-notebook-0.5.1.tar.gz", "has_sig": false, "md5_digest": "53db96f175a55f3b3cbff5b64e8e3434", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 173207, "upload_time": "2019-08-12T03:46:17", "url": "https://files.pythonhosted.org/packages/8d/68/98f2f9fdec2a2088eef54c5646a1fec5130a2ff0f12ac5438be620880bf6/pytest-notebook-0.5.1.tar.gz" } ], "0.5.2": [ { "comment_text": "", "digests": { "md5": "0bede599da105fbd441980e4f967835f", "sha256": "fe4cb7862bc369719df313d8b053436c030717807118736d49144c99c3b95943" }, "downloads": -1, "filename": "pytest_notebook-0.5.2-py3-none-any.whl", "has_sig": false, "md5_digest": "0bede599da105fbd441980e4f967835f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 33414, "upload_time": "2019-08-12T17:43:51", "url": "https://files.pythonhosted.org/packages/6c/c9/6976604a475448204425f22addaa42caff2bb28975147a19cbb14df7d752/pytest_notebook-0.5.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "52d53436ad157037d903adb62780c144", "sha256": "1343cf157503d02d87114ac97466b92755bc41d4dbe5aa0d465b33aeadcee22f" }, "downloads": -1, "filename": "pytest-notebook-0.5.2.tar.gz", "has_sig": false, "md5_digest": "52d53436ad157037d903adb62780c144", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 173825, "upload_time": "2019-08-12T17:43:53", "url": "https://files.pythonhosted.org/packages/3a/1c/f3cd97624a612308502190512dd944062be814a863e0510a0468e2e3d33a/pytest-notebook-0.5.2.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "7ca74c6b338a97ac66bc33dce7ebdc77", "sha256": "eac4909e982f028c7cc1f5622e6db96fe951170207b041975072d5f41b167739" }, "downloads": -1, "filename": "pytest_notebook-0.6.0-py3-none-any.whl", "has_sig": false, "md5_digest": "7ca74c6b338a97ac66bc33dce7ebdc77", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 37389, "upload_time": "2019-08-13T17:22:10", "url": "https://files.pythonhosted.org/packages/df/45/544d6a3e93437750f3d8e0ccafa9df8569121512d0da5bb75e789b79c7e0/pytest_notebook-0.6.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5559481ff18b953bc8d2cd1d8734e6b9", "sha256": "a6017ad79fea8fd04da313f91fdce6007fce21a3b2e5b9a137295274a0a68846" }, "downloads": -1, "filename": "pytest-notebook-0.6.0.tar.gz", "has_sig": false, "md5_digest": "5559481ff18b953bc8d2cd1d8734e6b9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 177265, "upload_time": "2019-08-13T17:22:11", "url": "https://files.pythonhosted.org/packages/55/0c/e7ea1735d2b5bdc4208ee02525bd9e5a6542b1741167551020ccd7794708/pytest-notebook-0.6.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "7ca74c6b338a97ac66bc33dce7ebdc77", "sha256": "eac4909e982f028c7cc1f5622e6db96fe951170207b041975072d5f41b167739" }, "downloads": -1, "filename": "pytest_notebook-0.6.0-py3-none-any.whl", "has_sig": false, "md5_digest": "7ca74c6b338a97ac66bc33dce7ebdc77", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 37389, "upload_time": "2019-08-13T17:22:10", "url": "https://files.pythonhosted.org/packages/df/45/544d6a3e93437750f3d8e0ccafa9df8569121512d0da5bb75e789b79c7e0/pytest_notebook-0.6.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5559481ff18b953bc8d2cd1d8734e6b9", "sha256": "a6017ad79fea8fd04da313f91fdce6007fce21a3b2e5b9a137295274a0a68846" }, "downloads": -1, "filename": "pytest-notebook-0.6.0.tar.gz", "has_sig": false, "md5_digest": "5559481ff18b953bc8d2cd1d8734e6b9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 177265, "upload_time": "2019-08-13T17:22:11", "url": "https://files.pythonhosted.org/packages/55/0c/e7ea1735d2b5bdc4208ee02525bd9e5a6542b1741167551020ccd7794708/pytest-notebook-0.6.0.tar.gz" } ] }