{ "info": { "author": "Petr Muller", "author_email": "afri@afri.cz", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Quality Assurance" ], "description": "# pyff: Python Diff\n\nPython Diff compares two versions of Python code (modules, packages,\ndirectories containing Python modules and/or packages) and detects syntactical\nand semantical differences between them.\n\n[![Build Status](https://travis-ci.org/petr-muller/pyff.svg?branch=master)](https://travis-ci.org/petr-muller/pyff) [![Maintainability](https://api.codeclimate.com/v1/badges/bb1aa4b86fed8097aa0f/maintainability)](https://codeclimate.com/github/petr-muller/pyff/maintainability) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/b970a7c6c6314ab3b28bddaeab523457)](https://www.codacy.com/app/afri/pyff?utm_source=github.com&utm_medium=referral&utm_content=petr-muller/pyff&utm_campaign=Badge_Grade) [![Coverage Status](https://coveralls.io/repos/github/petr-muller/pyff/badge.svg?branch=master)](https://coveralls.io/github/petr-muller/pyff?branch=master)\n\n## Installation\n\nYou can install pyff from [Python Package Index](https://pypi.org/) as\n`pythodiff` (unfortunately, a name `pyff` was taken already):\n\n```\npip install pythondiff\n```\n\n## Usage\n\nYou can run `pyff` to compare two Python modules:\n\n```\npyff old.py new.py\n```\n\nFor comparing Python packages, there is the `pyff-package` executable:\n\n```\npyff-package old_package new_package\n```\n\nYou can also compare directories using the `pyff-dir` executable. In this case,\n`pyff` finds all Python content in both directories (recurively) and compares\neverything it finds:\n\n```\npyff-dir old_directory new_directory\n```\n\nFinally, `pyff-git` can compare Python content between two revisions in a given\nGit repository. As with the `pyff-dir` case, this finds all Python content in\nthe repository.\n\n```\npyff-git https://github.com/petr-muller/pyff.git master^ master\n```\n\n## Development\n\nThe development of `pyff` is far from complete: most of the basic features (code\nelements being removed, changed or added) are there but not all of them. Some\nPython code can also confuse `pyff` or even make it crash. PRs or issue reports\nare happily accepted.\n\n`pyff` is written using a modern (3.6+) Python version and has both unit and\nintegration tests. The unit test coverage goal is 100% but it is OK to not cover\nsome elementary (or really hard to unit-test) code, provided the code is marked\nwith a `# pragma: no cover` comment. [pytest](https://pytest.org) is used as a\nunit test driver. All code is statically checked with\n[Pylint](https://www.pylint.org/) and also annotated with Python type hints. The\n[mypy](http://mypy-lang.org/) checker is used to check them. You can install all\nnecessary test requirements using pip:\n\n```\npip install -r requirements-tests.txt\n```\n\nThere are shell helpers in `helpers/helpers.sh` that make\nexecuting all checks easier:\n\n```\n$ . helpers/helpers.sh\n$ ft # Fast Test: run just unit tests, without pylint and mypy checks\n$ st # Slow Test: run all (unit and integration) tests, pylint and mypy\n```\n\nThe integration tests are executed using an excellent\n[clitest](https://github.com/aureliojargas/clitest) tool.\n\n## Future\n\n`pyff` is a pre-1.0.0 version: basically a toy project of mine. A brief list of\nTODOs for me to consider doing a 1.0.0 version is in [#19](#19). My idea is to\nbring `pyff` to a small GitHub PR-commenting bot that would comment PRs to\nPython repositories with a nice, human-readable summary of changes.\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/petr-muller/pyff", "keywords": "python static_analysis diff", "license": "", "maintainer": "", "maintainer_email": "", "name": "pythondiff", "package_url": "https://pypi.org/project/pythondiff/", "platform": "", "project_url": "https://pypi.org/project/pythondiff/", "project_urls": { "Homepage": "https://github.com/petr-muller/pyff" }, "release_url": "https://pypi.org/project/pythondiff/0.7.0/", "requires_dist": [ "colorama", "astroid", "gitpython" ], "requires_python": "", "summary": "Python Diff", "version": "0.7.0" }, "last_serial": 4092178, "releases": { "0.1.1": [ { "comment_text": "", "digests": { "md5": "992345e9cacc9cc3eece4ae37605a0db", "sha256": "bc86389f06fb4737931c3b187f7d3ed40dbc680771a6bd0750e2055583caf116" }, "downloads": -1, "filename": "pythondiff-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "992345e9cacc9cc3eece4ae37605a0db", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15974, "upload_time": "2018-06-28T08:18:39", "url": "https://files.pythonhosted.org/packages/43/69/1f900ffb6988b98d2a7c57692a1c528c75dce62160a6a998e79e5dcbeede/pythondiff-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a40a28713df900db2a145d8c34b6e0ec", "sha256": "96396d72abfae29fd493c96bcefb87e0dc13b2e7c5bbbd80e7a043a814b22490" }, "downloads": -1, "filename": "pythondiff-0.1.1.tar.gz", "has_sig": false, "md5_digest": "a40a28713df900db2a145d8c34b6e0ec", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14140, "upload_time": "2018-06-28T08:20:59", "url": "https://files.pythonhosted.org/packages/21/16/7ac66f1ed6f8df79817d4eaba066f85fe48b44e803e7c82ecfd29e0a44a7/pythondiff-0.1.1.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "3f2e9e65d371ee4a4bf3f45b21fe793d", "sha256": "e98dde42e9981fc759d2234de994ed2e11d1532ba76cb1608ae212fe00b98b78" }, "downloads": -1, "filename": "pythondiff-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "3f2e9e65d371ee4a4bf3f45b21fe793d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 20204, "upload_time": "2018-06-29T18:16:17", "url": "https://files.pythonhosted.org/packages/61/c8/55556766ce00d53525a3656bc5aa72f3b62ec75524184a6491831830a132/pythondiff-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "305b495c58fe2df7433e8c0a29aae278", "sha256": "3add4db0c5bd6dd60e664c697f586f92abf1b67e62badd5d7876603fa575b7cd" }, "downloads": -1, "filename": "pythondiff-0.2.0.tar.gz", "has_sig": false, "md5_digest": "305b495c58fe2df7433e8c0a29aae278", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15103, "upload_time": "2018-06-29T18:16:18", "url": "https://files.pythonhosted.org/packages/57/69/0fb8a189f567abc5583f23ed3011e1189f06c1772f975184fccf2da144a2/pythondiff-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "68bbaa39bafab86f8ddd21566c752e73", "sha256": "6749e1768a9bb79aff2f6ed30df19b4be3d81c1c2eba034c0b38ac05f80261bc" }, "downloads": -1, "filename": "pythondiff-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "68bbaa39bafab86f8ddd21566c752e73", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17130, "upload_time": "2018-06-29T18:29:13", "url": "https://files.pythonhosted.org/packages/14/fe/48c0811391f98647e24ea84147ad5795fcb97c4d2f2f824f25ba47a6d817/pythondiff-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cf7035dc8938418955cb6da5f01e9705", "sha256": "2eaa9c16c19da24b39888c1d0b54da779055b59babc9d2734cbe4f6fe6ac483f" }, "downloads": -1, "filename": "pythondiff-0.2.1.tar.gz", "has_sig": false, "md5_digest": "cf7035dc8938418955cb6da5f01e9705", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15187, "upload_time": "2018-06-29T18:29:14", "url": "https://files.pythonhosted.org/packages/ee/45/56125815bbe78ed3bb56270b827e46b8889dc77bbdd94d4ead5282a2e8c9/pythondiff-0.2.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "545f9ff20a0751a6d6ab98057c8b0b74", "sha256": "ab94494e6358286e0f25f0775aac359d8fdb3681bfae2e5095d955861da7a1c6" }, "downloads": -1, "filename": "pythondiff-0.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "545f9ff20a0751a6d6ab98057c8b0b74", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17821, "upload_time": "2018-07-01T16:46:25", "url": "https://files.pythonhosted.org/packages/35/cf/135ec69265f9ae3a2da430b68526700a9c745d991c37418160038c420d6a/pythondiff-0.3.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "933402695dcb79ffe3bfe6fa77044e37", "sha256": "bcf19a9ff8c2b3f94df6bd264f358bc93ed5e60ca2bb0c46b2fc13c3cd31529c" }, "downloads": -1, "filename": "pythondiff-0.3.2.tar.gz", "has_sig": false, "md5_digest": "933402695dcb79ffe3bfe6fa77044e37", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15744, "upload_time": "2018-07-01T16:46:27", "url": "https://files.pythonhosted.org/packages/33/70/525e10447a0bd1a05971466fd8b4b495973bec3385868d2fc3dfa1672725/pythondiff-0.3.2.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "89dfe9269aba0c0b6a7297417fe061fc", "sha256": "630fa24f0380a851498188b3248a943ba04871cf498d96245e7edd263c3dd390" }, "downloads": -1, "filename": "pythondiff-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "89dfe9269aba0c0b6a7297417fe061fc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 19455, "upload_time": "2018-07-07T17:45:12", "url": "https://files.pythonhosted.org/packages/17/bb/25d0585983a5d657a9fdfab5909b36d2f645febe0d0b5481fbe460e39e62/pythondiff-0.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4c45608600507f11f848a0065d4ea1ce", "sha256": "dae8fefa92ad861e2c7be4b02b016fd186bd4926cadb7325bf9c134029ce1efd" }, "downloads": -1, "filename": "pythondiff-0.4.0.tar.gz", "has_sig": false, "md5_digest": "4c45608600507f11f848a0065d4ea1ce", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16768, "upload_time": "2018-07-07T17:45:13", "url": "https://files.pythonhosted.org/packages/6c/e0/16b12cb2b92f70f8edd6d4215e09fb71f5c689da48c692b38392dbeecc4c/pythondiff-0.4.0.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "268ca7d7f56efc1be7faa4a3d912beb9", "sha256": "4d1b6aa8a87d22c22bb8e033baed5b6cc9c90a688dc9a46f1f6cb437b3329fd5" }, "downloads": -1, "filename": "pythondiff-0.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "268ca7d7f56efc1be7faa4a3d912beb9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 21391, "upload_time": "2018-07-15T22:01:43", "url": "https://files.pythonhosted.org/packages/76/61/1bab242656ebdd476137e3843d100492a7838a21b469e74186aa3e48e355/pythondiff-0.5.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7a1f64132227b5ea984ebeded44c5c8b", "sha256": "56898ec38f60fa71b3ce731c24a61c66970d44d04cc3cdfa73a5a453ea6a1658" }, "downloads": -1, "filename": "pythondiff-0.5.0.tar.gz", "has_sig": false, "md5_digest": "7a1f64132227b5ea984ebeded44c5c8b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18181, "upload_time": "2018-07-15T22:01:45", "url": "https://files.pythonhosted.org/packages/9b/b5/b3fcc72ca47cc95382d0371d3dac704e55296f950d75df35c579d1de2981/pythondiff-0.5.0.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "324191e579c734e0524c5c0b07f26600", "sha256": "17c7294ee32da0dd5e5b478f07cf692d6b482bb2f14202532a08d0a2d5c22c92" }, "downloads": -1, "filename": "pythondiff-0.6.0-py3-none-any.whl", "has_sig": false, "md5_digest": "324191e579c734e0524c5c0b07f26600", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 22324, "upload_time": "2018-07-18T19:41:00", "url": "https://files.pythonhosted.org/packages/04/6a/953237e34912adb5d0fd80547e8c66c7572a0a199ee0d5206c1bb393fca7/pythondiff-0.6.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ecd6effeceb71f622a0f6568643cd04e", "sha256": "4158053701fc1edd0e21b2114e2dd74a5fe6320a28b62ca91a35526a0e537e74" }, "downloads": -1, "filename": "pythondiff-0.6.0.tar.gz", "has_sig": false, "md5_digest": "ecd6effeceb71f622a0f6568643cd04e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18695, "upload_time": "2018-07-18T19:41:03", "url": "https://files.pythonhosted.org/packages/38/ae/f6b8c583e474df72ca51f232e80f75525f255d4e55b92e31785cf3e3bd37/pythondiff-0.6.0.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "93d246edaa7ee7cebadfd4bab7a02646", "sha256": "76c9617cc2e30c086dbf3dfc343b7c0605c629298e24d34e51c99ec1cd471208" }, "downloads": -1, "filename": "pythondiff-0.6.1-py3-none-any.whl", "has_sig": false, "md5_digest": "93d246edaa7ee7cebadfd4bab7a02646", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 22336, "upload_time": "2018-07-18T19:58:54", "url": "https://files.pythonhosted.org/packages/6b/b5/f639084af66087d8fc103666213c5c07a8a5a7d800a0d8c0627fd06c4869/pythondiff-0.6.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8e63983a2c1b58c8b9adce4e5c31e016", "sha256": "871aaed6bec68aa70904e7fa7f6b9044394ef3145a8b35fe6708d7ba7efd8be4" }, "downloads": -1, "filename": "pythondiff-0.6.1.tar.gz", "has_sig": false, "md5_digest": "8e63983a2c1b58c8b9adce4e5c31e016", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18713, "upload_time": "2018-07-18T19:58:55", "url": "https://files.pythonhosted.org/packages/8f/63/eda1ca74bb0f64f8d8698e83fa65f2cf742f6ee905adfa5835fa21d0270c/pythondiff-0.6.1.tar.gz" } ], "0.6.2": [ { "comment_text": "", "digests": { "md5": "e7bbb896f79f60f461a197256b83df4a", "sha256": "53a3bf36274be00883395b9a4022adf1a0816c32e44f15b7cbee9aaab6e4d2e4" }, "downloads": -1, "filename": "pythondiff-0.6.2-py3-none-any.whl", "has_sig": false, "md5_digest": "e7bbb896f79f60f461a197256b83df4a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 22488, "upload_time": "2018-07-21T18:52:11", "url": "https://files.pythonhosted.org/packages/1d/00/30c2ff1c8af1d74047f341d0418d4ebddef3f1f041ebd1770a0441cc729b/pythondiff-0.6.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5249574b43965d7a002c0bad3653812b", "sha256": "a320f12f2d40f6627ebb4ccee95636f3cf9f0185e2637e080eab8c3b377c8461" }, "downloads": -1, "filename": "pythondiff-0.6.2.tar.gz", "has_sig": false, "md5_digest": "5249574b43965d7a002c0bad3653812b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19115, "upload_time": "2018-07-21T18:52:12", "url": "https://files.pythonhosted.org/packages/af/b9/3a3bfe0bb8aa3a2247ad95bd33a4d6e075de0e0cc452e6488f4b318e976a/pythondiff-0.6.2.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "d85a3eecdc7cbf0546e274560001de28", "sha256": "ce88257bf229e7ff8ea9b52c4fdad6e9e857dc7ecbf046d2c273dcae0adebf1b" }, "downloads": -1, "filename": "pythondiff-0.7.0-py3-none-any.whl", "has_sig": false, "md5_digest": "d85a3eecdc7cbf0546e274560001de28", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 22881, "upload_time": "2018-07-23T08:22:42", "url": "https://files.pythonhosted.org/packages/85/e9/7528985b0eb03da10b7b7015c75425be285324cdb0381358413d64741c7f/pythondiff-0.7.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1d1a1207538a9228a6e4a2dbc4d47f88", "sha256": "39ede1a5848b6ea188a806d330c654504ba822c22914af0509925a25eb15bcbe" }, "downloads": -1, "filename": "pythondiff-0.7.0.tar.gz", "has_sig": false, "md5_digest": "1d1a1207538a9228a6e4a2dbc4d47f88", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19433, "upload_time": "2018-07-23T08:22:43", "url": "https://files.pythonhosted.org/packages/4e/d2/ecec600129434e450d5474f8f08031cbd1be8785f806f0c21f842578923a/pythondiff-0.7.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d85a3eecdc7cbf0546e274560001de28", "sha256": "ce88257bf229e7ff8ea9b52c4fdad6e9e857dc7ecbf046d2c273dcae0adebf1b" }, "downloads": -1, "filename": "pythondiff-0.7.0-py3-none-any.whl", "has_sig": false, "md5_digest": "d85a3eecdc7cbf0546e274560001de28", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 22881, "upload_time": "2018-07-23T08:22:42", "url": "https://files.pythonhosted.org/packages/85/e9/7528985b0eb03da10b7b7015c75425be285324cdb0381358413d64741c7f/pythondiff-0.7.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1d1a1207538a9228a6e4a2dbc4d47f88", "sha256": "39ede1a5848b6ea188a806d330c654504ba822c22914af0509925a25eb15bcbe" }, "downloads": -1, "filename": "pythondiff-0.7.0.tar.gz", "has_sig": false, "md5_digest": "1d1a1207538a9228a6e4a2dbc4d47f88", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19433, "upload_time": "2018-07-23T08:22:43", "url": "https://files.pythonhosted.org/packages/4e/d2/ecec600129434e450d5474f8f08031cbd1be8785f806f0c21f842578923a/pythondiff-0.7.0.tar.gz" } ] }