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[:3] 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) |
| YTT303 | sys.version[:1] referenced (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!')
# in python10 this will be False
if sys.version[:1] >= '3': # YTT303
print('python3!')
# correct way to do this
python_major_version = str(sys.version_info[0])
if sys.version_info >= (3,):
print('python3!')
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.5.0]
Metadata
Release files for flake8-2020 1.5.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| flake8_2020-1.5.0.tar.gz | 4.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| flake8_2020-1.5.0-py2.py3-none-any.whl | Python 3, Python 2 | none | any | Details |
Total release size: 9.6 kB
Release files / flake8_2020-1.5.0.tar.gz
| Download URL | flake8_2020-1.5.0.tar.gz |
|---|---|
| Size | 4.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6226c9ef49c15bf4a0d7c07edb13653d9d02a44ba1e47c9385e07e17344f81d2
|
|
BLAKE2b-256 checksum How to use checksums |
607df1d299500f398d103a610d44e3f31667d2efb89a212d352a795c3173cf35
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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
|
Release files / flake8_2020-1.5.0-py2.py3-none-any.whl
| Download URL | flake8_2020-1.5.0-py2.py3-none-any.whl |
|---|---|
| Size | 5.0 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
565baf15a7cfb2dee91b5ddded5e1dec083adf46b3971deec5843569f7681747
|
|
BLAKE2b-256 checksum How to use checksums |
b7fc7e68a941a792e8bc273b695d37b10d3faefff3896c481d326d0396872c39
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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
|