{ "info": { "author": "Anthony Sottile", "author_email": "asottile@umich.edu", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3 :: Only" ], "description": "[![Build Status](https://dev.azure.com/asottile/asottile/_apis/build/status/asottile.flake8-2020?branchName=master)](https://dev.azure.com/asottile/asottile/_build/latest?definitionId=27&branchName=master)\n[![Azure DevOps coverage](https://img.shields.io/azure-devops/coverage/asottile/asottile/27/master.svg)](https://dev.azure.com/asottile/asottile/_build/latest?definitionId=27&branchName=master)\n\nflake8-2020\n===========\n\nflake8 plugin which checks for misuse of `sys.version` or `sys.version_info`\n\nthis will become a problem when `python3.10` or `python4.0` exists (presumably\nduring the year 2020).\n\nyou might also find an early build of [python3.10] useful\n\n[python3.10]: https://github.com/asottile/python3.10\n\n## installation\n\n`pip install flake8-2020`\n\n## flake8 codes\n\n| Code | Description |\n|--------|--------------------------------------------------------|\n| YTT101 | `sys.version[:3]` referenced (python3.10) |\n| YTT102 | `sys.version[2]` referenced (python3.10) |\n| YTT103 | `sys.version` compared to string (python3.10) |\n| YTT201 | `sys.version_info[0] == 3` referenced (python4) |\n| YTT202 | `six.PY3` referenced (python4) |\n| YTT203 | `sys.version_info[1]` compared to integer (python4) |\n| YTT204 | `sys.version_info.minor` compared to integer (python4) |\n| YTT301 | `sys.version[0]` referenced (python10) |\n| YTT302 | `sys.version` compared to string (python10) |\n| YTT303 | `sys.version[:1]` referenced (python10) |\n\n## rationale\n\nlots of code incorrectly references the `sys.version` and `sys.version_info`\nmembers. in particular, this will cause some issues when the version of python\nafter python3.9 is released. my current recommendation is 3.10 since I believe\nit breaks less code, here's a few patterns that will cause issues:\n\n```python\n# in python3.10 this will report as '3.1' (should be '3.10')\npython_version = sys.version[:3] # YTT101\n# in python3.10 this will report as '1' (should be '10')\npy_minor = sys.version[2]\n# in python3.10 this will be False (which goes against developer intention)\nsys.version >= '3.5' # YTT103\n\n\n# correct way to do this\npython_version = '{}.{}'.format(*sys.version_info)\npy_minor = str(sys.version_info[1])\nsys.version_info >= (3, 5)\n```\n\n```python\n# in python4 this will report as `False` (and suddenly run python2 code!)\nis_py3 = sys.version_info[0] == 3 # YTT201\n\n# in python4 this will report as `False` (six violates YTT201!)\nif six.PY3: # YTT202\n print('python3!')\n\nif sys.version_info[0] >= 3 and sys.version_info[1] >= 5: # YTT203\n print('py35+')\n\nif sys.version_info.major >= 3 and sys.version_info.minor >= 6: # YTT204\n print('py36+')\n\n# correct way to do this\nis_py3 = sys.version_info >= (3,)\n\nif not six.PY2:\n print('python3!')\n\nif sys.version_info >= (3, 5):\n print('py35+')\n\nif sys.version_info >= (3, 6):\n print('py36+')\n```\n\n```python\n# in python10 this will report as '1'\npython_major_version = sys.version[0] # YTT301\n# in python10 this will be False\nif sys.version >= '3': # YTT302\n print('python3!')\n# in python10 this will be False\nif sys.version[:1] >= '3': # YTT303\n print('python3!')\n\n\n# correct way to do this\npython_major_version = str(sys.version_info[0])\n\nif sys.version_info >= (3,):\n print('python3!')\n\nif sys.version_info >= (3,):\n print('python3!')\n```\n\n## as a pre-commit hook\n\nSee [pre-commit](https://github.com/pre-commit/pre-commit) for instructions\n\nSample `.pre-commit-config.yaml`:\n\n```yaml\n- repo: https://gitlab.com/pycqa/flake8\n rev: 3.7.8\n hooks:\n - id: flake8\n additional_dependencies: [flake8-2020==1.4.0]\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": "https://github.com/asottile/flake8-2020", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "flake8-2020", "package_url": "https://pypi.org/project/flake8-2020/", "platform": "", "project_url": "https://pypi.org/project/flake8-2020/", "project_urls": { "Homepage": "https://github.com/asottile/flake8-2020" }, "release_url": "https://pypi.org/project/flake8-2020/1.4.0/", "requires_dist": [ "flake8 (>=3.7)", "importlib-metadata (>=0.9) ; python_version < \"3.8\"" ], "requires_python": ">=3.6", "summary": "flake8 plugin which checks for misuse of `sys.version` or `sys.version_info`", "version": "1.4.0" }, "last_serial": 5992781, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "730d6a976944132376dc9e028c36c0ab", "sha256": "d49a86d8df51810b3e9593ddfe6ee580c591a9fd264ae8d8ac5654417ccdf722" }, "downloads": -1, "filename": "flake8_2020-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "730d6a976944132376dc9e028c36c0ab", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 4330, "upload_time": "2019-08-24T23:50:56", "url": "https://files.pythonhosted.org/packages/26/8f/bf632d60abf1036b256bb09df2a78749ae6b0184a6c2b146a45f15849d8f/flake8_2020-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ab846fa41fa2e21a825036df48cd72ef", "sha256": "549860ef81de5a6ffbc15c317aaeefc39586228295df890d9d3f6635ab200f39" }, "downloads": -1, "filename": "flake8_2020-1.0.0.tar.gz", "has_sig": false, "md5_digest": "ab846fa41fa2e21a825036df48cd72ef", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 3917, "upload_time": "2019-08-24T23:50:58", "url": "https://files.pythonhosted.org/packages/5d/12/bdfa470286d7c23bbbbe9cd6cdd33b4d31d61294b5ca52617a3262b498bd/flake8_2020-1.0.0.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "8050e42b7529cbc331b1a092e45a8849", "sha256": "ffb25d09df6a53e255652a0ce4640f2c265b914ffcc8f454c0f9b7d0d4513fe8" }, "downloads": -1, "filename": "flake8_2020-1.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8050e42b7529cbc331b1a092e45a8849", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 4519, "upload_time": "2019-08-27T16:09:36", "url": "https://files.pythonhosted.org/packages/c7/22/d1cc9587f9c63e92eb7777ab9f63c011899d4a44a842015cc3872daa91c5/flake8_2020-1.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "799a825dd8d457184bc9746526f62de2", "sha256": "6be3a21ca2c54153e553ee5433a952b4d26a53a9ba4ae365d7cc8e2c41a0ba3c" }, "downloads": -1, "filename": "flake8_2020-1.1.0.tar.gz", "has_sig": false, "md5_digest": "799a825dd8d457184bc9746526f62de2", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 4134, "upload_time": "2019-08-27T16:09:38", "url": "https://files.pythonhosted.org/packages/f8/5a/7b13ae4d9fa995f9d9ccbc58dff1ad7ff4172d64fb6a5621a2ae4892f341/flake8_2020-1.1.0.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "b2cd3bad54442a9fd6533ab3ac877247", "sha256": "aafe7cc8497eb69c8b23542c23ed0587bd3007872ff00b4bb263a06ee7edb158" }, "downloads": -1, "filename": "flake8_2020-1.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b2cd3bad54442a9fd6533ab3ac877247", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 4766, "upload_time": "2019-08-29T15:55:46", "url": "https://files.pythonhosted.org/packages/52/3c/2b4f439469c71fce67a2383de889532bc1f3d02becf9fbf8010daada4b5b/flake8_2020-1.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a267961ba7c5280759903e9455dd4f6a", "sha256": "6671d239ad9cd5f2a7f70cf1a338e3db0bcaed3eeacef61b8712b8767df4e4e8" }, "downloads": -1, "filename": "flake8_2020-1.2.0.tar.gz", "has_sig": false, "md5_digest": "a267961ba7c5280759903e9455dd4f6a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 4420, "upload_time": "2019-08-29T15:55:48", "url": "https://files.pythonhosted.org/packages/d1/89/f10cdb05a0ba0e7d7d88e2417fddb3b3f55f5c3d7a6ac4b08c465a5656b5/flake8_2020-1.2.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "fd671c74bef0d10037b3cae2cd3059a0", "sha256": "fffae5741015649d44940539c40ff298f78a4b805c0a1f41459a0ffa693552f5" }, "downloads": -1, "filename": "flake8_2020-1.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "fd671c74bef0d10037b3cae2cd3059a0", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 4763, "upload_time": "2019-08-29T16:29:51", "url": "https://files.pythonhosted.org/packages/c8/3e/af8c68c9ae81c472924ba6a36f535f03444f9a56d81b1ff4de38bb669b6e/flake8_2020-1.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "becb0cefb48bafd4ba39aeb50c9fcd9c", "sha256": "8ce2545a7c724a3c84bf3a38e0958b7ad0cba57027d84a7b0d1e3412daff3c35" }, "downloads": -1, "filename": "flake8_2020-1.2.1.tar.gz", "has_sig": false, "md5_digest": "becb0cefb48bafd4ba39aeb50c9fcd9c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 4411, "upload_time": "2019-08-29T16:29:52", "url": "https://files.pythonhosted.org/packages/4f/24/6e2dae93f69b123ffaeb5fc7db6ad49fe33f0412b5ed6fdc6b74239de19a/flake8_2020-1.2.1.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "cc5e9c5f0dd4df8f6c42fa1bd90ef0e2", "sha256": "01b10d681fc215e589601a4f6b635a925d3f3e410afecf89942a71702a3ec7ea" }, "downloads": -1, "filename": "flake8_2020-1.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "cc5e9c5f0dd4df8f6c42fa1bd90ef0e2", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 4881, "upload_time": "2019-08-30T17:13:15", "url": "https://files.pythonhosted.org/packages/f7/d3/4942e54a2324131d896deae46ffa370a49674cc05b61cf2dadd5c091418e/flake8_2020-1.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0d39c5b380dc479000f37adb84a8328a", "sha256": "11aa84fb979a78d81dd53e3cf60abc71de354c647e8810477c7759bb7df73437" }, "downloads": -1, "filename": "flake8_2020-1.3.0.tar.gz", "has_sig": false, "md5_digest": "0d39c5b380dc479000f37adb84a8328a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 4532, "upload_time": "2019-08-30T17:13:17", "url": "https://files.pythonhosted.org/packages/68/e8/b31dc6970b259b5cbb0a2f13f07eebdb003f8609ee8251d064378e149c00/flake8_2020-1.3.0.tar.gz" } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "7474f0c4dd62c96bbc4d84467693fbe5", "sha256": "76e4e1a137114b6e029b03e484abc6c109a811b8d7e2ca75931c1e09136ef96c" }, "downloads": -1, "filename": "flake8_2020-1.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7474f0c4dd62c96bbc4d84467693fbe5", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 4954, "upload_time": "2019-10-17T23:12:34", "url": "https://files.pythonhosted.org/packages/a4/8c/5e59520b4f9ecdbb2b1560867943123c389f0abcc5347d71125edc9c8aef/flake8_2020-1.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a26f10156ddbf71f005b43922a7c499b", "sha256": "5c919192653ae5e1757e8e602f511aba7695f16e06c500f7ce7ec30446586104" }, "downloads": -1, "filename": "flake8_2020-1.4.0.tar.gz", "has_sig": false, "md5_digest": "a26f10156ddbf71f005b43922a7c499b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 4647, "upload_time": "2019-10-17T23:12:35", "url": "https://files.pythonhosted.org/packages/82/8b/dbd50a9492af84385129e5c1dbabf6d85d291d42b0b4f8e047444e556288/flake8_2020-1.4.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "7474f0c4dd62c96bbc4d84467693fbe5", "sha256": "76e4e1a137114b6e029b03e484abc6c109a811b8d7e2ca75931c1e09136ef96c" }, "downloads": -1, "filename": "flake8_2020-1.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7474f0c4dd62c96bbc4d84467693fbe5", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 4954, "upload_time": "2019-10-17T23:12:34", "url": "https://files.pythonhosted.org/packages/a4/8c/5e59520b4f9ecdbb2b1560867943123c389f0abcc5347d71125edc9c8aef/flake8_2020-1.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a26f10156ddbf71f005b43922a7c499b", "sha256": "5c919192653ae5e1757e8e602f511aba7695f16e06c500f7ce7ec30446586104" }, "downloads": -1, "filename": "flake8_2020-1.4.0.tar.gz", "has_sig": false, "md5_digest": "a26f10156ddbf71f005b43922a7c499b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 4647, "upload_time": "2019-10-17T23:12:35", "url": "https://files.pythonhosted.org/packages/82/8b/dbd50a9492af84385129e5c1dbabf6d85d291d42b0b4f8e047444e556288/flake8_2020-1.4.0.tar.gz" } ] }