{ "info": { "author": "Zope Community", "author_email": "zope3-dev@zope.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Framework :: Zope3", "Intended Audience :: Developers", "License :: OSI Approved :: Zope Public License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Internet :: WWW/HTTP" ], "description": "============\nz3c.coverage\n============\n\n.. image:: https://travis-ci.org/zopefoundation/z3c.coverage.png\n :target: https://travis-ci.org/zopefoundation/z3c.coverage\n\nThis package contains tools to work with Python coverage data.\n\n``coveragereport`` produces HTML reports from coverage data, with\nsyntax-highlighted source code and per-package aggregate numbers.\n\n``coveragediff`` compares two sets of coverage reports and reports\nregressions, that is, increases in the number of untested lines of code.\n\n.. contents::\n\n\nUsing coveragereport\n====================\n\n::\n\n $ coveragereport --help\n Usage: coveragereport [options] [inputpath [outputdir]]\n\n Converts coverage reports to HTML. If the input path is omitted, it defaults\n to coverage or .coverage, whichever exists. If the output directory is\n omitted, it defaults to inputpath + /report or ./coverage-reports, depending\n on whether the input path points to a directory or a file.\n\n Options:\n -h, --help show this help message and exit\n -q, --quiet be quiet\n -v, --verbose be verbose (default)\n --strip-prefix=PREFIX\n strip base directory from filenames loaded from\n .coverage\n --path-alias=PATH=LOCALPATH\n define path mappings for filenames loaded from\n .coverage\n\nExample use with ``zope.testrunner``::\n\n $ bin/test --coverage=coverage\n $ coveragereport\n $ ln -s mypackage.html coverage/report/index.html\n $ xdg-open coverage/report/index.html\n $ xdg-open coverage/report/all.html\n\nExample use with ``nose`` and ``coverage.py``::\n\n $ nosetests --with-coverage --cover-erase\n $ coveragereport --strip-prefix=/full/path/to/source/\n $ ln -s mypackage.html coverage-reports/index.html\n $ xdg-open coverage-reports/index.html\n $ xdg-open coverage-reports/all.html\n\nSample report:\n\n.. image:: http://i.imgur.com/mkqA3.png\n\n.. note:: You need `enscript `_\n installed and available in your ``$PATH`` if you want syntax\n highlighting.\n\n\nUsing coveragediff\n==================\n\n::\n\n Usage: coveragediff [options] olddir newdir\n\n Options:\n -h, --help show this help message and exit\n --include=REGEX only consider files matching REGEX\n --exclude=REGEX ignore files matching REGEX\n --email=ADDR send the report to a given email address (only if\n regressions were found)\n --from=ADDR set the email sender address\n --subject=SUBJECT set the email subject\n --web-url=BASEURL include hyperlinks to HTML-ized coverage reports at a\n given URL\n\nUsage example with ``zope.testrunner``::\n\n $ bin/test --coverage=coverage\n $ vi src/...\n $ mv coverage coverage.old\n $ bin/test --coverage=coverage\n $ coveragediff coverage.old coverage\n\nYou cannot use ``coveragediff`` with ``coverage.py`` data. More on that below.\n\nOutput example::\n\n $ coveragediff coverage.old coverage\n my.package.module: 36 new lines of untested code\n my.package.newmodule: new file with 15 lines of untested code (out of 23)\n\nOutput with clickable links::\n\n $ coveragediff coverage.old coverage --web-url=http://example.com/coverage\n my.package.module: 36 new lines of untested code\n See http://example.com/coverage/my.package.module.html\n\n my.package.newmodule: new file with 15 lines of untested code (out of 23)\n See http://example.com/coverage/my.package.newmodule.html\n\nOutput via email, convenient for continuous integration::\n\n $ coveragediff coverage.old coverage --web-url=http://example.com/coverage \\\n --email 'Developers ' \\\n --from 'Buildbot '\n\nThat last example doesn't produce any output, but sends an email (via SMTP\nto localhost:25).\n\n\nGetting coverage data\n=====================\n\nzope.testrunner\n---------------\n\n`zope.testrunner `_ can\nproduce a directory full of files named ``dotted.package.name.cover``\nthat contain source code annotated with coverage information. To get\nthem, use ::\n\n bin/test --coverage=outdir/\n\nBoth ``coveragereport`` and ``coveragediff`` accept this as inputs.\n\n\ncoverage.py\n-----------\n\n`coverage.py `_ can produce\na ``.coverage`` file containing (incomplete) coverage information. To get it,\nuse ::\n\n coverage run bin/testrunner\n\n``coveragereport`` can take the ``.coverage`` file as an input, but it\nalso needs access to the matching source files. And you have to manually\nspecify the absolute pathname prefix of your source tree so that the\nreport know how to translate filenames into dotted package names. Also,\nit's not enough to have *absolute* pathnames, you need to supply the\n*canonical* absolute pathname (with no symlink segments), such as returned\nby ``os.path.realpath``. This is very inconvenient. Sorry.\n\n``coveragediff`` is unable to compare two ``.coverage`` files and report\nregressions. One reason for that is the incompleteness of the data format\n(it line numbers of executed statements, but doesn't say which lines contain\ncode and which ones are blank/comments/continuation lines/excluded source\nlines). The other reason is simpler: nobody wrote the code. `;)`\n\nUnfortunately ``coverage annotate`` does not produce files compatible\nwith ``coveragereport``/``coveragediff``. This could also be remedied\nif somebody wrote a patch.\n\n\n.. note:: If you want to use a ``.coverage`` file produced on another machine\n or simply in a different working directory, you will need to\n tell ``coveragereport`` how to adjust the absolute filenames so that\n the sources can be found. Use the ``--path-alias`` option for that.\n Alternatively you could use ``coverage combine`` to manipulate the\n ``.coverage`` file itself, as described in the documentation.\n\n\ntrace.py\n--------\n\nThe ``*.cover`` annotated-source format produced by ``zope.testrunner``\nactually comes from the Python standard library module `trace.py\n`_. You can probably use trace.py\ndirectly. I've never tried.\n\n\nFrequently Asked Questions\n==========================\n\nWhy use z3c.coverage instead of coverage html?\n----------------------------------------------\n\nSome people prefer the look of the reports produced by z3c.coverage.\nSome people find per-package coverage summaries or the tree-like navigation\nconvenient.\n\nShould I use zope.testrunner's built-in coverage, or coverage run bin/test?\n-----------------------------------------------------------------------------\n\n``coverage.py`` is *much* faster, but using it (and hooking it up to z3c.coverage)\nis perhaps less convenient. E.g. if you use ``zc.buildout 1.5.x`` with\n``zc.recipe.testrunner``, you will be unable to use ``coverage run bin/test``\nbecause of mystic semi-broken site isolation magic of the former.\n\nDid anyone actually ask any of these questions?\n-----------------------------------------------\n\nDoes asking myself count?\n\n\nChanges\n=======\n\n2.1.0 (2017-04-24)\n------------------\n\n- Support (and require) coverage.py >= 4.0.\n\n- Fix incorrect highlighting of missed lines when processing coverage.py data\n (broken since 2.0.2).\n\n- Dropped Python 2.6 support.\n\n- Added Python 3.4, 3.5 and 3.6 support.\n\n\n2.0.3 (2015-11-09)\n------------------\n\n- Standardize namespace __init__.\n\n\n2.0.2 (2013-10-01)\n------------------\n\n- Bug: coveragereport now also accepts non-ASCII chars in source files\n (also fix the case when enscript is not available).\n\n\n2.0.1 (2013-10-01)\n------------------\n\n- Bug: coveragereport now also accepts non-ASCII chars in source files.\n\n\n2.0.0 (2013-02-20)\n------------------\n\n- Added Python 3.3 and PyPy 1.9 support.\n\n- Dropped Python 2.4 and 2.5 support.\n\n\n1.3.1 (2012-10-24)\n------------------\n\n- Nicer PyPI description. Doctests are tests, not docs.\n\n- ``coveragereport`` now accepts ``--path-alias``.\n\n- ``coveragereport``: new color step between yellow (90%) and green (100%), a\n yellowish-green (95%).\n\n\n1.3.0 (2012-09-06)\n------------------\n\n- ``coveragereport`` now accepts ``--help``, ``--verbose`` and ``--quiet``\n options, with verbose being on by default.\n\n- ``coveragereport`` now can handle .coverage files produced by\n http://pypi.python.org/pypi/coverage\n\n- Bugfix: sorting by numbered of uncovered lines was broken in the\n ``all.html`` report.\n\n\n1.2.0 (2010-02-11)\n------------------\n\n- Rename the ``coverage`` script to ``coveragereport``, to avoid name clashes\n with Ned Batchelder's excellent coverage.py.\n\n\n1.1.3 (2009-07-24)\n------------------\n\n- Bug: Doctest did not normalize the whitespace in `coveragediff.txt`. For\n some reason it passes while testing independently, but when running all\n tests, it failed.\n\n\n1.1.2 (2008-04-14)\n------------------\n\n- Bug: When a package path contained anywhere the word \"test\", it was ignored\n from the coverage report. The intended behavior, however, was to ignore\n files that relate to setting up tests.\n\n- Bug: Sort the results of `os.listdir()` in `README.txt` to avoid\n non-deterministic failures.\n\n- Bug: The logic for ignoring unit and functional test modules also used to\n ignore modules and packages called `testing`.\n\n- Change \"Unit test coverage\" to \"Test coverage\" in the title -- it works\n perfectly fine for functional tests too.\n\n\n1.1.1 (2008-01-31)\n------------------\n\n- Bug: When the package was released, the test which tests the availability of\n an SVN revision number failed. Made the test more reliable.\n\n\n1.1.0 (2008-01-29)\n------------------\n\n- Feature: The ``main()`` coverage report function now accepts the arguments\n of the script as a function argument, making it easier to configure the\n script from buildout.\n\n- Feature: When the report directory does not exist, the report generator\n creates it for you.\n\n- Feature: Eat your own dog food by creating a buildout that can create\n coverage reports.\n\n- Bug: Improved the test coverage to 100%.\n\n\n1.0.1 (2007-09-26)\n------------------\n\n- Bug: Fixed meta-data.\n\n\n1.0.0 (2007-09-26)\n------------------\n\n- First public release.\n\n\n0.2.1\n-----\n\n- Feature: Added the ``--web`` option to ``coveragediff``.\n- Feature: Added a test suite.\n\n\n0.2.0\n-----\n\n- Feature: Added ``coveragediff.py``.\n\n\n0.1.0\n-----\n\n- Initial release of ``coveragereport.py``.", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://pypi.python.org/pypi/z3c.coverage", "keywords": "zope3 test coverage html", "license": "ZPL 2.1", "maintainer": "", "maintainer_email": "", "name": "z3c.coverage", "package_url": "https://pypi.org/project/z3c.coverage/", "platform": "", "project_url": "https://pypi.org/project/z3c.coverage/", "project_urls": { "Homepage": "http://pypi.python.org/pypi/z3c.coverage" }, "release_url": "https://pypi.org/project/z3c.coverage/2.1.0/", "requires_dist": null, "requires_python": "", "summary": "A script to visualize coverage reports via HTML", "version": "2.1.0" }, "last_serial": 2825576, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "8f382ede9d9e37dab14227d2953fc89e", "sha256": "6025bfee9ebae09f317b20ec2e7bddc0a772e5c34f6b64723b6c4d9006392f8b" }, "downloads": -1, "filename": "z3c.coverage-1.0.0.tar.gz", "has_sig": false, "md5_digest": "8f382ede9d9e37dab14227d2953fc89e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27260, "upload_time": "2007-09-26T21:20:43", "url": "https://files.pythonhosted.org/packages/7b/d1/19b58d8060a0198cb994a3656a6d4092db0da1bea427ddc7ac7d7aefc91b/z3c.coverage-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "243b7062ecadde82657559ab5f71182a", "sha256": "ac64de857d30325a548778512dddc86fb9a7d04e82a422939f6343f20875fc50" }, "downloads": -1, "filename": "z3c.coverage-1.0.1.tar.gz", "has_sig": false, "md5_digest": "243b7062ecadde82657559ab5f71182a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27268, "upload_time": "2007-09-26T21:25:41", "url": "https://files.pythonhosted.org/packages/4e/95/133ae6b128b9c3a3c8f73da15b80e6896a82c20d15dd7afeb1edd405fdd2/z3c.coverage-1.0.1.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "c57f7f012d81717a72cbf3a936dc7f33", "sha256": "3a3eae35100b3aa8fbf298bb8ab6a73f23964f26d74074a7e69ff54cc1f97a00" }, "downloads": -1, "filename": "z3c.coverage-1.1.0.tar.gz", "has_sig": false, "md5_digest": "c57f7f012d81717a72cbf3a936dc7f33", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40022, "upload_time": "2008-01-29T18:26:16", "url": "https://files.pythonhosted.org/packages/6e/c4/b342042e18f70226ee78aa9d807b5b3e6a0a217a0344adbaaef73dd429f1/z3c.coverage-1.1.0.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "aede5738fe08080997caffa821ec4ddc", "sha256": "0f2c8814e56f1bdbc813d7f8e7f4e02023b0b82518258ff643ce60d0aa82863e" }, "downloads": -1, "filename": "z3c.coverage-1.1.1.tar.gz", "has_sig": false, "md5_digest": "aede5738fe08080997caffa821ec4ddc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40184, "upload_time": "2008-01-31T20:48:53", "url": "https://files.pythonhosted.org/packages/57/26/652768e1dc8cf39b3c8f1f71071c0a13081b1d6c278ab809b82c597cad64/z3c.coverage-1.1.1.tar.gz" } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "a34541f817e674158638d4877f65dd8e", "sha256": "8b8bc2d8eac34336e016af2f37adb83ae2c99020f61a8c03d9a54fafd3890c95" }, "downloads": -1, "filename": "z3c.coverage-1.1.2.tar.gz", "has_sig": false, "md5_digest": "a34541f817e674158638d4877f65dd8e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40863, "upload_time": "2008-04-14T18:45:09", "url": "https://files.pythonhosted.org/packages/7a/e1/a91860e3c2c44b79269c72e312093b5369baa1944eb0dfbbb3f971a012f1/z3c.coverage-1.1.2.tar.gz" } ], "1.1.3": [ { "comment_text": "", "digests": { "md5": "107507df79556c02f53bf11b56b8cc8b", "sha256": "c7caae6fb7eaf95aa781ee7b24006477f61f3d9aa42edd4e4660f73eb8372c14" }, "downloads": -1, "filename": "z3c.coverage-1.1.3.tar.gz", "has_sig": false, "md5_digest": "107507df79556c02f53bf11b56b8cc8b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39241, "upload_time": "2009-07-24T15:43:44", "url": "https://files.pythonhosted.org/packages/72/bd/7bc88868d33dc414f67991196b7d421ea407d45d98baf0748f60a0679dc9/z3c.coverage-1.1.3.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "d7f323a6c89f848fab38209f2162294d", "sha256": "7aa7264e75b5812881f805c4e0e8de820451e24599398b8f190c517acefbc946" }, "downloads": -1, "filename": "z3c.coverage-1.2.0.tar.gz", "has_sig": false, "md5_digest": "d7f323a6c89f848fab38209f2162294d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35175, "upload_time": "2010-02-11T12:09:12", "url": "https://files.pythonhosted.org/packages/93/98/2d7bca65c25200434798d2f7edf6acf5b5f7206d547bdb45a720bd09ccc5/z3c.coverage-1.2.0.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "6b5e3cbf2237438be3674f56058e4c22", "sha256": "57ca5e337ae1548feb4759218c616251c1fcba189e6c1e095a2ab822a9b7a636" }, "downloads": -1, "filename": "z3c.coverage-1.3.0.zip", "has_sig": false, "md5_digest": "6b5e3cbf2237438be3674f56058e4c22", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 61150, "upload_time": "2012-09-06T13:44:05", "url": "https://files.pythonhosted.org/packages/5a/4d/e8ced8088390e81ccf3b5295824a1461db3a115539cd9887fb571b11be9d/z3c.coverage-1.3.0.zip" } ], "1.3.1": [ { "comment_text": "", "digests": { "md5": "97250641152fd5369dc30533205ce868", "sha256": "ff7f95f40e00d8e2c121cdfe17a6872efcdde16e5d4ae8d5a044e80c729a25e2" }, "downloads": -1, "filename": "z3c.coverage-1.3.1.zip", "has_sig": false, "md5_digest": "97250641152fd5369dc30533205ce868", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 60972, "upload_time": "2012-10-24T14:37:32", "url": "https://files.pythonhosted.org/packages/f3/72/2b338ff9dc54e5823c634bcc57c79ba9e776dec170a2bbd6767e68bbaa2e/z3c.coverage-1.3.1.zip" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "d727843d73e0afa04be0e0b5ca9b6178", "sha256": "86194a7fc24a63346a42b3ac6cd33f869bab756be74538286e8ff9578c124804" }, "downloads": -1, "filename": "z3c.coverage-2.0.0.zip", "has_sig": false, "md5_digest": "d727843d73e0afa04be0e0b5ca9b6178", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 59891, "upload_time": "2013-02-20T05:33:33", "url": "https://files.pythonhosted.org/packages/27/29/d4ce054ebb04b5770a0b1725806a41eb89dd27570077857a12381b37ec5f/z3c.coverage-2.0.0.zip" } ], "2.0.1": [ { "comment_text": "", "digests": { "md5": "36cd0836d1fb24fa5fa2c1ecbd29ab54", "sha256": "dcfe4a616647ec141c3d98548d74ba2844f91fa949b858e0d47c99e253c4ce84" }, "downloads": -1, "filename": "z3c.coverage-2.0.1.zip", "has_sig": false, "md5_digest": "36cd0836d1fb24fa5fa2c1ecbd29ab54", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 60646, "upload_time": "2013-10-01T11:49:09", "url": "https://files.pythonhosted.org/packages/e8/59/a058da1ed435a7c4d27965a2a88b2e92de260ce5277c8fd63fbc97309366/z3c.coverage-2.0.1.zip" } ], "2.0.2": [ { "comment_text": "", "digests": { "md5": "df5285d60cd73b153988f9a4c9b93c19", "sha256": "cda9d13999cb499ccd8d15619f4fa9a14795ce9a6b984e54afd522a18d26d813" }, "downloads": -1, "filename": "z3c.coverage-2.0.2.zip", "has_sig": false, "md5_digest": "df5285d60cd73b153988f9a4c9b93c19", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 60789, "upload_time": "2013-10-01T11:51:41", "url": "https://files.pythonhosted.org/packages/dc/8e/62b8f0de405176d16042dedd51d6ebbb34a440e19761f4fd26f2becd4b97/z3c.coverage-2.0.2.zip" } ], "2.0.3": [ { "comment_text": "", "digests": { "md5": "a37e1fa141e4400ab0f6bcc0d1b299eb", "sha256": "40728bdc5b10f81950223b1f75413de735f6b437f6a240cb68b4a7475139e144" }, "downloads": -1, "filename": "z3c.coverage-2.0.3.tar.gz", "has_sig": false, "md5_digest": "a37e1fa141e4400ab0f6bcc0d1b299eb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42174, "upload_time": "2015-11-09T14:07:34", "url": "https://files.pythonhosted.org/packages/91/52/79e1c14c7f3a75da57d66e439199dec31e4220863200e05d4d1a3a66f307/z3c.coverage-2.0.3.tar.gz" } ], "2.1.0": [ { "comment_text": "", "digests": { "md5": "1af20e9bdc9b817da282ee8bc3ab48c1", "sha256": "680283745bf1dd3ac717a0823c09ce03c98819bf7d3049d9acc11736b5939749" }, "downloads": -1, "filename": "z3c.coverage-2.1.0.tar.gz", "has_sig": false, "md5_digest": "1af20e9bdc9b817da282ee8bc3ab48c1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 46348, "upload_time": "2017-04-24T11:59:08", "url": "https://files.pythonhosted.org/packages/4f/c0/d2529d7248480825a205666c139364251eaa659bd99623b0b2e04b959d9a/z3c.coverage-2.1.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "1af20e9bdc9b817da282ee8bc3ab48c1", "sha256": "680283745bf1dd3ac717a0823c09ce03c98819bf7d3049d9acc11736b5939749" }, "downloads": -1, "filename": "z3c.coverage-2.1.0.tar.gz", "has_sig": false, "md5_digest": "1af20e9bdc9b817da282ee8bc3ab48c1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 46348, "upload_time": "2017-04-24T11:59:08", "url": "https://files.pythonhosted.org/packages/4f/c0/d2529d7248480825a205666c139364251eaa659bd99623b0b2e04b959d9a/z3c.coverage-2.1.0.tar.gz" } ] }