{ "info": { "author": "Christopher Prohm", "author_email": "mail@cprohm.de", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Topic :: Software Development :: Testing" ], "description": "# ipytest - Unit tests in IPython notebooks\n\n[Usage](#usage)\n| [Global state](#global-state)\n| [Changes](#changes)\n| [Related packages](#related-packages)\n| [Reference](#reference)\n| [Development](#development)\n| [Legacy functionality](#legacy-functionality)\n| [License](#license)\n\n\nSometimes quick experiments in IPython grow large and you find yourself wanting\nunit tests. This module aims to make testing code in IPython notebooks easy. At\nits core, it offers a way to run [`pytest`](https://pytest.org) tests inside the\nnotebook environment. It is also designed to make the transfer of the tests into\nproper python modules easy.\n\nInstallation: `pip install ipytest`\n\nFeatures:\n\n- support for [pytest](pytest.org) inside notebooks (with all bells and\n whistles)\n- tight integration with IPython via magics and automatic code transforms\n\n## Usage\n\nFor usage see the [example notebook](./Example.ipynb) or the documentation for\nthe core API below.\n\nThe suggested way to import `ipytest` is:\n\n```python\nimport ipytest\nipytest.config(rewrite_asserts=True, magics=True)\n\n__file__ = \"INSERT YOUR NOTEBOOK FILENAME HERE\"\n```\n\nAfterwards test in the current cell can be executed as in:\n\n```python\n%%run_pytest[clean] -qq\n\ndef test_example():\n assert [1, 2, 3] == [1, 2, 3]\n```\n\nThis command will first delete any previously defined tests, execute the cell\nand then run pytest. See the [reference](#reference) for a detailed list of\navailable functionality.\n\n## Global state\n\nThere are two sources of global state when using pytest inside the notebook:\n\n1. pytest will find any test function ever defined. This behavior can lead to\n unexpected results when test functions are renamed, as their previous\n definition is still available inside the kernel. `ipytest` ships the\n [`clean_test`](#ipytestclean_tests) function to delete such instances.\n Also the [`%%run_pytest[clean]`](#run_pytestclean-) magic clears any\n previously defined tests.\n2. Python's module system caches imports and therefore acts as a global state.\n To test the most recent version of any module, the module needs to be\n reloaded. `ipytest` offers the [`reload`](#ipytestreload) function. The\n `autoreload` extension of IPython may also help here. To test local\n packages, it is advisable to install them as development packages, e.g.,\n `pip install -e .`.\n\n## Changes\n\nNote: development is tracked on the `develop` branch.\n\n- `0.7.1`:\n - fix assertion rewriting for `pytest>=5.0.0`\n- `0.7.0`:\n - add option to run tests in separate threads. This change allows to test\n async code with the `pytest_asyncio` plugin\n - add a proper signature to `ipytest.config(...)` and show the current\n settings as a repr.\n- `0.6.0`: officially remove python 2 support. While `ipytest` was marked to\n work on python 2 and python 3, this statement was not tested and most likely\n not true. This change only documents the current state.\n- `0.5.0`:\n - Fix assertion rewriting via magics in `ipython>=7`\n - Add support to raise a `RuntimeError` on test errors (set\n `ipytest.config.raise_on_error = True`)\n - Add support to set base arguments (set `ipytest.config.addopts = []`)\n - Add config setting to enable magics (set `ipytest.config.magics = True`).\n - Add config setting to create a temporary file to work without the\n notebook filename (set `ipytest.config.tempfile_fallback = True`).\n - Allow to set multiple config values at the same time by calling the\n config object (`ipytest.config(...)`).\n - Add `ipytest.running_as_test()` to detect whether a notebook is executed\n as a test.\n- `0.4.0`: add support for automatic AST transforms, deprecate non pytest API.\n- `0.3.0`: change default pattern for `clean_tests` to match pytest discovery\n- `0.2.2`: add support for assert rewriting with current pytest versions\n- `0.2.1`: add ipython magics to simplify test execution\n- `0.2.0`: support for using pytest inside notebooks\n- `0.1.0`: support for running `unittest.FunctionTestCase`,\n `unittest.TestCases`, and `doctests`.\n\n## Related packages\n\n`ipytest` is designed to enable running tests within an interactive notebook\nsession. There are also other packages that aim to use notebooks as tests\nthemselves, for example by comparing the output of running all cells to the\noutput of previous runs. These packages include:\n\n- [nbval](https://github.com/computationalmodelling/nbval) is actively\n maintained. It is also used in the integration tests of `ipytest`.\n- [pytest-ipynb](https://github.com/zonca/pytest-ipynb) seems to be no longer\n maintained as the latest commit was on March 2016. .\n- ...\n\nPlease create an issue, if I missed a packaged or mischaracterized any package.\n\n## Reference\n\n### `ipytest.run`\n`ipytest.run(*args, module=None, filename=None, plugins=(), return_exit_code=False)`\n\nExecute all tests in the passed module (defaults to __main__) with pytest.\n\n#### Parameters\n\n* **args** (*any*):\n additional commandline options passed to pytest\n* **module** (*any*):\n the module containing the tests. If not given, __main__ will be used.\n* **filename** (*any*):\n the filename of the file containing the tests. It has to be a real\n file, e.g., a notebook name, since itts existence will be checked by\n pytest. If not given, the __file__ attribute of the passed module\n will be used.\n* **plugins** (*any*):\n additional plugins passed to pytest.\n\n\n\n### `%%run_pytest ...`\n\nIPython magic that first executes the cell, then executes `ipytest.run()`.\nAny arguments passed on the magic line be passed on to pytest.\nTo register the magics, run `ipytest.config.magics = True` first.\n\nFor example:\n\n```python\n%%run_pytest -qq\n\n\ndef test_example():\n ...\n\n```\n\n### `%%run_pytest[clean] ...`\n\nSame as the `%%run_pytest`, but cleans any previously found tests, i.e., only\ntests defined in the current cell are executed.\nTo register the magics, run `ipytest.config.magics = True` first.\n\n### `%%rewrite_asserts`\n\nRewrite any asserts in the current cell using pytest without running the tests.\nTo get best results run the tests with `run_pytest`.\nTo register the magics, run `ipytest.config.magics = True` first.\n\nFor example::\n\n```python\n%%rewrite_asserts\n\ndef test_example():\n ...\n```\n\n### `ipytest.config`\n\nConfigure `ipytest`. The following settings are suported:\n\n- `ipytest.config.rewrite_asserts` (default: `False`): enable ipython AST\n transforms globally to rewrite asserts.\n- `ipytest.config.magics` (default: `False`): if set to `True` register the\n ipytest magics.\n- `ipytest.config.clean` (default: `[Tt]est*`): the pattern used to clean\n variables.\n- `ipytest.config.addopts` (default: `()`): pytest command line arguments to\n prepend to every pytest invocation. For example setting\n `ipytest.config.addopts= ['-qq']` will execute pytest with the least\n verbosity.\n- `ipytest.config.raise_on_error` (default: `False`): if `True`, unsuccessful\n invocations will raise a `RuntimeError`.\n- `ipytest.config.tempfile_fallback` (default: `False`): if `True`, a temporary\n file is created as a fallback when no valid filename can be determined.\n- `ipytest.config.run_in_thread` (default: `False`): if `True`, pytest will be\n run a separate thread. This way of running is required when testing async\n code with `pytest_asyncio` since it starts a separate event loop.\n\nTo set multiple arguments at once, the config object can also be called, as in:\n\n```python\n\nipytest.config(rewrite_asserts=True, raise_on_error=True)\n```\n\n### `ipytest.exit_code`\n\nThe return code of the last pytest invocation.\n\n### `ipytest.clean_tests`\n`ipytest.clean_tests(pattern=None, items=None)`\n\nDelete tests with names matching the given pattern.\n\nIn IPython the results of all evaluations are kept in global variables\nunless explicitly deleted. This behavior implies that when tests are renamed\nthe previous definitions will still be found if not deleted. This method\naims to simply this process.\n\nAn effecitve pattern is to start with the cell containing tests with a call\nto clean_tests, then defined all test cases, and finally call run_tests.\nThis way renaming tests works as expected.\n\n**Arguments:**\n\n- pattern: a glob pattern used to match the tests to delete.\n- * **items: the globals object containing the tests. If None is given, the**:\n globals object is determined from the call stack.\n\n\n\n### `ipytest.reload`\n`ipytest.reload(*mods)`\n\nReload all modules passed as strings.\n\nThis function may be useful, when mixing code in external modules and\nnotebooks.\n\nUsage:\n\n```\nreload(\"ipytest._util\", \"ipytest\")\n```\n\n\n\n### `ipytest.running_as_test`\n`ipytest.running_as_test()`\n\nCheck whether the notebook is executed as a test.\n\nThis function may be useful, when running notebooks as integration tests to\nensure the runtime is not exceedingly long.\n\nUsage:\n\n```\nmodel.fit(x, y, epochs=500 if not ipytest.running_as_test() else 1)\n```\n\n\n\n## Development\n\nTo execute the unit tests of `ipytest` run\n\n pipenv sync --dev\n pipenv run test\n\nBefore commit execute `pipenv run precommit` to update the documentation,\nformat the code, and run tests.\n\n## Legacy functionality\n\n### `ipytest.run_pytest`\n`ipytest.run_pytest(*args, **kwargs)`\n\nExecute tests in the passed module (defaults to __main__) with pytest.\n\n**Arguments:**\n\n- module: the module containing the tests.\n If not given, __main__ will be used.\n- filename: the filename of the file containing the tests.\n It has to be a real file, e.g., a notebook name, since itts existence will\n be checked by pytest.\n If not given, the __file__ attribute of the passed module will be used.\n- pytest_options: additional options passed to pytest\n- pytest_plugins: additional plugins passed to pytest.\n\n\n\n### `ipytest.run_tests`\n`ipytest.run_tests(*args, **kwargs)`\n\nRun all tests in the given items dictionary.\n\n**Arguments:**\n\n- doctest: if True search for doctests.\n- * **items: the globals object containing the tests. If None is given, the**:\n globals object is determined from the call stack.\n\n\n\n### `ipytest.collect_tests`\n`ipytest.collect_tests(*args, **kwargs)`\n\nCollect all test cases and return a unittest.TestSuite.\n\nThe arguments are the same as for ipytest.run_tests.\n\n\n\n### `ipytest.assert_equals`\n`ipytest.assert_equals(*args, **kwargs)`\n\nCompare two objects and throw and exception if they are not equal.\n\nThis method uses ipytest.get_assert_function to determine the assert\nimplementation to use depending on the argument type.\n\n**Arguments**\n\n- a, b: the two objects to compare.\n- * **args, kwargs: (keyword) arguments that are passed to the underlying**:\n test function. This option can, for example, be used to set the\n tolerance when comparing numpy.array objects\n\n\n\n### `ipytest.get_assert_function`\n`ipytest.get_assert_function(*args, **kwargs)`\n\nDetermine the assert function to use depending on the arguments.\n\nIf either object is a numpy .ndarray, a pandas.Series, a\npandas.DataFrame, or pandas.Panel, it returns the assert functions\nsupplied by numpy and pandas.\n\n\n\n### `ipytest.unittest_assert_equals`\n`ipytest.unittest_assert_equals(*args, **kwargs)`\n\nCompare two objects with the assertEqual method of unittest.TestCase.\n\n\n\n## License\n\n```\nThe MIT License (MIT)\nCopyright (c) 2015 - 2018 Christopher Prohm\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the \"Software\"),\nto deal in the Software without restriction, including without limitation\nthe rights to use, copy, modify, merge, publish, distribute, sublicense,\nand/or sell copies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\nDEALINGS IN THE SOFTWARE.\n\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": "", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "ipytest", "package_url": "https://pypi.org/project/ipytest/", "platform": "", "project_url": "https://pypi.org/project/ipytest/", "project_urls": null, "release_url": "https://pypi.org/project/ipytest/0.7.1/", "requires_dist": [ "packaging" ], "requires_python": ">=3", "summary": "Unit tests in IPython notebooks.", "version": "0.7.1" }, "last_serial": 5593877, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "ad26816caedf4346002091437657c7e0", "sha256": "245b9b02a0d1e049bab85fb6e2972268cde9db85bff3f71291bef10d0526f812" }, "downloads": -1, "filename": "ipytest-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ad26816caedf4346002091437657c7e0", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8610, "upload_time": "2016-02-07T21:12:27", "url": "https://files.pythonhosted.org/packages/53/f9/8f2eee014c20fc78d48ad5d039240e27d3ca1ec0fc873c52fb722f4d936d/ipytest-0.1.0-py2.py3-none-any.whl" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "df192e87fb54c4e97a1fc14e2e73fc25", "sha256": "b75ceacb83c72bae89a70e75aa39091586e9ea07bd148ce041242086330d3d1f" }, "downloads": -1, "filename": "ipytest-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "df192e87fb54c4e97a1fc14e2e73fc25", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9597, "upload_time": "2016-12-24T14:09:27", "url": "https://files.pythonhosted.org/packages/11/54/3b567abda2e55c691b0ad4fb4fc6517d0c947c6226c294e0501f894efafb/ipytest-0.2.0-py2.py3-none-any.whl" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "32fb26287dfcab8e2a276f8edf6a3711", "sha256": "e2d585979957e15a468b648e56b17628d52d02a3bd0fcd050afb954411ce8692" }, "downloads": -1, "filename": "ipytest-0.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "32fb26287dfcab8e2a276f8edf6a3711", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10915, "upload_time": "2016-12-28T18:01:05", "url": "https://files.pythonhosted.org/packages/95/7f/9e36497951925358627ed00260c5bf77678b63f828e4c63610513c844b37/ipytest-0.2.1-py2.py3-none-any.whl" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "c33fa18218cee59a7c16ceb07b89e26d", "sha256": "c894c74cd68ecc43292010d37ea13cab4542aa69157203bf3642fd347eb6ae9d" }, "downloads": -1, "filename": "ipytest-0.2.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c33fa18218cee59a7c16ceb07b89e26d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10949, "upload_time": "2018-04-23T19:41:10", "url": "https://files.pythonhosted.org/packages/a9/40/6eea52aaf6c0996eb0ebf1fa9c1a558b6179ce89fdabcb3a0c7abaf06c25/ipytest-0.2.2-py2.py3-none-any.whl" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "aadd0931454b85ff8f66da5f46d0b725", "sha256": "2f1abb0914f5cd157a8888fcaf6a968cb5906022787cb1a9702da764eb630a9b" }, "downloads": -1, "filename": "ipytest-0.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "aadd0931454b85ff8f66da5f46d0b725", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7769, "upload_time": "2018-09-04T18:36:06", "url": "https://files.pythonhosted.org/packages/02/a5/60fb87fa7b4cf447b71877cbe187df44f9067d18080a41492be805298b9c/ipytest-0.3.0-py2.py3-none-any.whl" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "9f18f45a7f1608679a6cb5c0d7f75e52", "sha256": "52b6373f2b34a69e6b5f30a6bd29499a1115558c4fb0ba2203a193e13b2aa118" }, "downloads": -1, "filename": "ipytest-0.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9f18f45a7f1608679a6cb5c0d7f75e52", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10407, "upload_time": "2018-10-24T13:14:55", "url": "https://files.pythonhosted.org/packages/d3/70/0cabf990663e9ff711ae0aeeaba8fbcba9c710e007bdcea30d2687ef47e0/ipytest-0.4.0-py2.py3-none-any.whl" } ], "0.4.0b1": [ { "comment_text": "", "digests": { "md5": "a284011b39ded2e9088ef5ebe2f23e31", "sha256": "fea3213233537325a4a67dc9e9c9af716ff5de78f156cdb7e22f6fff1631be10" }, "downloads": -1, "filename": "ipytest-0.4.0b1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a284011b39ded2e9088ef5ebe2f23e31", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10235, "upload_time": "2018-10-01T21:35:07", "url": "https://files.pythonhosted.org/packages/65/69/a83e7d3af845c002c28fb31432e0b5dcf04cc685d1c7c7ad74971e833164/ipytest-0.4.0b1-py2.py3-none-any.whl" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "5852270e385ed6094440374dd408c76a", "sha256": "c25e09654b2b431047ab7f381333188be2e8fc66146f1f2aed44dc105128b074" }, "downloads": -1, "filename": "ipytest-0.5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5852270e385ed6094440374dd408c76a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12026, "upload_time": "2019-03-14T23:32:43", "url": "https://files.pythonhosted.org/packages/03/fc/ee32d5d41b84865de9c14537c37249f79c5f0046ad64af0a080a4e49338a/ipytest-0.5.0-py2.py3-none-any.whl" } ], "0.5.0b1": [ { "comment_text": "", "digests": { "md5": "5eaeac267bbc387ae4893c30c3813de9", "sha256": "c4e575a1207773a212b422c9d261568a088aa5c7c8ca6d00d9da496dc81c0cd9" }, "downloads": -1, "filename": "ipytest-0.5.0b1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5eaeac267bbc387ae4893c30c3813de9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11247, "upload_time": "2018-10-28T12:36:22", "url": "https://files.pythonhosted.org/packages/2e/12/fa782f5224a10767156d07735881e80b6eb69faa081e89e9197c2288c142/ipytest-0.5.0b1-py2.py3-none-any.whl" } ], "0.5.0b2": [ { "comment_text": "", "digests": { "md5": "e247651f019331328811782395c4f65f", "sha256": "2eca05219345497a3fe76e240bdc812e0dac7ca938f473bb3cc060235fae21e3" }, "downloads": -1, "filename": "ipytest-0.5.0b2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e247651f019331328811782395c4f65f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11470, "upload_time": "2018-10-28T20:11:32", "url": "https://files.pythonhosted.org/packages/c1/64/e06c3a1afccf26a27c019b9db2bff85901a1a53bb05efba4efa9a8ca67ce/ipytest-0.5.0b2-py2.py3-none-any.whl" } ], "0.5.0b3": [ { "comment_text": "", "digests": { "md5": "a9c3cdcb00ec5a52655533a963f274de", "sha256": "8d8ba9fd8ed6b9ad6d622e7bd48ef75d1f879fa863fd94e23e9c877df596b3f2" }, "downloads": -1, "filename": "ipytest-0.5.0b3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a9c3cdcb00ec5a52655533a963f274de", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11971, "upload_time": "2018-10-29T06:45:01", "url": "https://files.pythonhosted.org/packages/b8/82/96222862376b296c3ab09521d250cb79390388b9529e16b7b325478d98a4/ipytest-0.5.0b3-py2.py3-none-any.whl" } ], "0.5.0b4": [ { "comment_text": "", "digests": { "md5": "397025ea23198aabebe657f8a6a3425f", "sha256": "14d86bc4289385942944fce59ced0c7d53f436495ddddc134ec91282decd7da3" }, "downloads": -1, "filename": "ipytest-0.5.0b4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "397025ea23198aabebe657f8a6a3425f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11786, "upload_time": "2018-11-01T10:02:00", "url": "https://files.pythonhosted.org/packages/83/23/faf74e4dce5f0c6602a983737aece13c4e27be9fcfe844129c67c02d9003/ipytest-0.5.0b4-py2.py3-none-any.whl" } ], "0.5.0b5": [ { "comment_text": "", "digests": { "md5": "e29e67d0430d2f73543c1ae1acdb3270", "sha256": "57759dd3d4dabf1d3451d523326faf9e61b8ca88d36f8f6e30ec3db1493a1d9b" }, "downloads": -1, "filename": "ipytest-0.5.0b5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e29e67d0430d2f73543c1ae1acdb3270", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12069, "upload_time": "2019-02-24T18:34:53", "url": "https://files.pythonhosted.org/packages/46/70/e3c930a2b8f7429220172017da33e7ff5d26b271ed9d50c427c0778504db/ipytest-0.5.0b5-py2.py3-none-any.whl" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "6026411ea40c6c483f5542889607106d", "sha256": "c16b69e6b00c81dc08e5dd5c8c711d16154d9f32db8bb344c012441e927e0d3c" }, "downloads": -1, "filename": "ipytest-0.6.0-py3-none-any.whl", "has_sig": false, "md5_digest": "6026411ea40c6c483f5542889607106d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 12205, "upload_time": "2019-04-28T11:47:33", "url": "https://files.pythonhosted.org/packages/43/24/17f08fee64144a6c032bb2bd2ac48aeae628a24353e132fd35bf7dd9d1bb/ipytest-0.6.0-py3-none-any.whl" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "e1a6df2bc8964e3ede4c77df18d0df7d", "sha256": "42e6007f3396ba00ca7ba276af4aaa8ff80df5635a458694a9537a26ba63134b" }, "downloads": -1, "filename": "ipytest-0.7.0-py3-none-any.whl", "has_sig": false, "md5_digest": "e1a6df2bc8964e3ede4c77df18d0df7d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 12829, "upload_time": "2019-07-27T14:57:56", "url": "https://files.pythonhosted.org/packages/0c/be/145512bb16071064455a0b9b2638dafdef085f970490fbeca4b90bf7344f/ipytest-0.7.0-py3-none-any.whl" } ], "0.7.1": [ { "comment_text": "", "digests": { "md5": "6148a232e64f233714aeac43e0f98d7b", "sha256": "4f62c5aac3cc89ce33b402e822d6b879131e58386f64b20e6a2f4f3d9bb71870" }, "downloads": -1, "filename": "ipytest-0.7.1-py3-none-any.whl", "has_sig": false, "md5_digest": "6148a232e64f233714aeac43e0f98d7b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 12973, "upload_time": "2019-07-27T19:53:42", "url": "https://files.pythonhosted.org/packages/8d/3e/95fac18d9e4df6dcad1f1a8a12e8af6ad7e634845f852545b85fa0019e9a/ipytest-0.7.1-py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "6148a232e64f233714aeac43e0f98d7b", "sha256": "4f62c5aac3cc89ce33b402e822d6b879131e58386f64b20e6a2f4f3d9bb71870" }, "downloads": -1, "filename": "ipytest-0.7.1-py3-none-any.whl", "has_sig": false, "md5_digest": "6148a232e64f233714aeac43e0f98d7b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 12973, "upload_time": "2019-07-27T19:53:42", "url": "https://files.pythonhosted.org/packages/8d/3e/95fac18d9e4df6dcad1f1a8a12e8af6ad7e634845f852545b85fa0019e9a/ipytest-0.7.1-py3-none-any.whl" } ] }