Skip to main content

flake8 plugin which checks for misuse of `sys.version` or `sys.version_info`

Project description

Build Status Azure DevOps coverage

flake8-2020

flake8 plugin which checks for misuse of sys.version or sys.version_info

this will become a problem when python3.10 or python4.0 exists (presumably during the year 2020).

you might also find an early build of python3.10 useful

installation

pip install flake8-2020

flake8 codes

Code Description
YTT101 sys.version[:...] referenced (python3.10)
YTT102 sys.version[2] referenced (python3.10)
YTT103 sys.version compared to string (python3.10)
YTT201 sys.version_info[0] == 3 referenced (python4)
YTT202 six.PY3 referenced (python4)
YTT203 sys.version_info[1] compared to integer (python4)
YTT204 sys.version_info.minor compared to integer (python4)
YTT301 sys.version[0] referenced (python10)
YTT302 sys.version compared to string (python10)

rationale

lots of code incorrectly references the sys.version and sys.version_info members. in particular, this will cause some issues when the version of python after python3.9 is released. my current recommendation is 3.10 since I believe it breaks less code, here's a few patterns that will cause issues:

# in python3.10 this will report as '3.1' (should be '3.10')
python_version = sys.version[:3]  # YTT101
# in python3.10 this will report as '1' (should be '10')
py_minor = sys.version[2]
# in python3.10 this will be False (which goes against developer intention)
sys.version >= '3.5'  # YTT103


# correct way to do this
python_version = '{}.{}'.format(*sys.version_info)
py_minor = str(sys.version_info[1])
sys.version_info >= (3, 5)
# in python4 this will report as `False` (and suddenly run python2 code!)
is_py3 = sys.version_info[0] == 3  # YTT201

# in python4 this will report as `False` (six violates YTT201!)
if six.PY3:  # YTT202
    print('python3!')

if sys.version_info[0] >= 3 and sys.version_info[1] >= 5:  # YTT203
    print('py35+')

if sys.version_info.major >= 3 and sys.version_info.minor >= 6:  # YTT204
    print('py36+')

# correct way to do this
is_py3 = sys.version_info >= (3,)

if not six.PY2:
    print('python3!')

if sys.version_info >= (3, 5):
    print('py35+')

if sys.version_info >= (3, 6):
    print('py36+')
# in python10 this will report as '1'
python_major_version = sys.version[0]  # YTT301
# in python10 this will be False
if sys.version >= '3':  # YTT302
    print('python3!')

# correct way to do this
python_major_version = str(sys.version_info[0])

if sys.version_info >= (3,):
    print('python3!')

as a pre-commit hook

See pre-commit for instructions

Sample .pre-commit-config.yaml:

-   repo: https://gitlab.com/pycqa/flake8
    rev: 3.7.8
    hooks:
    -   id: flake8
        additional_dependencies: [flake8-2020==1.2.0]

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

flake8_2020-1.2.0.tar.gz (4.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

flake8_2020-1.2.0-py2.py3-none-any.whl (4.8 kB view details)

Uploaded Python 2Python 3

File details

Details for the file flake8_2020-1.2.0.tar.gz.

File metadata

  • Download URL: flake8_2020-1.2.0.tar.gz
  • Upload date:
  • Size: 4.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.1.0 requests-toolbelt/0.9.1 tqdm/4.33.0 CPython/3.6.8

File hashes

Hashes for flake8_2020-1.2.0.tar.gz
Algorithm Hash digest
SHA256 6671d239ad9cd5f2a7f70cf1a338e3db0bcaed3eeacef61b8712b8767df4e4e8
MD5 a267961ba7c5280759903e9455dd4f6a
BLAKE2b-256 d189f10cdb05a0ba0e7d7d88e2417fddb3b3f55f5c3d7a6ac4b08c465a5656b5

See more details on using hashes here.

File details

Details for the file flake8_2020-1.2.0-py2.py3-none-any.whl.

File metadata

  • Download URL: flake8_2020-1.2.0-py2.py3-none-any.whl
  • Upload date:
  • Size: 4.8 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.1.0 requests-toolbelt/0.9.1 tqdm/4.33.0 CPython/3.6.8

File hashes

Hashes for flake8_2020-1.2.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 aafe7cc8497eb69c8b23542c23ed0587bd3007872ff00b4bb263a06ee7edb158
MD5 b2cd3bad54442a9fd6533ab3ac877247
BLAKE2b-256 523c2b4f439469c71fce67a2383de889532bc1f3d02becf9fbf8010daada4b5b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page