Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

flake8-2020

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

flake8-2020

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

  • 1.8.1
  • PyPI
  • Socket score

Maintainers
1

build status pre-commit.ci status

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

CodeDescription
YTT101sys.version[:3] referenced (python3.10)
YTT102sys.version[2] referenced (python3.10)
YTT103sys.version compared to string (python3.10)
YTT201sys.version_info[0] == 3 referenced (python4)
YTT202six.PY3 referenced (python4)
YTT203sys.version_info[1] compared to integer (python4)
YTT204sys.version_info.minor compared to integer (python4)
YTT301sys.version[0] referenced (python10)
YTT302sys.version compared to string (python10)
YTT303sys.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://github.com/pycqa/flake8
    rev: 3.7.8
    hooks:
    -   id: flake8
        additional_dependencies: [flake8-2020==1.6.1]

FAQs


Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc