A flake8 extension that implements misc. lints
Project description
flake8-pie

A flake8 extension that implements misc. lints
Note: flake8-pie requires Python 3.6 or greater
lints
- PIE781: You are assigning to a variable and then returning. Instead remove the assignment and return.
- PIE782: Unnecessary f-string. You can safely remove the
fprefix. - PIE783: Celery tasks should have explicit names.
- PIE784: Celery crontab is missing explicit arguments.
- PIE785: Celery tasks should have expirations.
PIE781: Assign and Return
Based on Clippy's
let_and_return
and Microsoft's TSLint rule
no-unnecessary-local-variable.
For more info on the structure of this lint, see the accompanying blog post.
examples
# error
def foo():
x = bar()
return x
# allowed
def foo():
x, _ = bar()
return x
PIE782: No Pointless F Strings
Warn about usage of f-string without templated values.
examples
x = (
f"foo {y}", # ok
f"bar" # error
)
PIE783: Celery tasks should have explicit names.
Warn about Celery task definitions that don't have explicit names.
Note: this lint is kind of naive considering any decorator with a .task()
method or any decorator called shared_task() a Celery decorator.
examples
# error
@app.task()
def foo():
pass
# ok
@app.task(name="app_name.tasks.foo")
def foo():
pass
PIE784: Celery crontab is missing explicit arguments.
The crontab class provided by Celery has some default args that are
suprising to new users. Specifically, crontab(hour="0,12") won't run a task
at midnight and noon, it will run the task at every minute during those two
hours. This lint makes that call an error, forcing you to write
crontab(hour="0, 12", minute="*").
Additionally, the lint is a bit more complex in that it requires you specify
every smaller increment than the largest time increment you provide. So if you
provide days_of_week, then you need to provide hours and minutes
explicitly.
Note: if you like the default behavior of crontab() then you can either
disable this lint or pass "*" for the kwarg value, e.g., minutes="*".
Also, since this lint is essentially a naive search for calls to a
crontab() function, if you have a function named the same then this will
cause false positives.
PIE785: Celery tasks should have expirations.
Celery tasks can bunch up if they don't have expirations.
This enforces specifying expirations in both the celery beat config dict and
in .apply_async() calls.
The same caveat applies about how this lint is naive.
dev
# install dependencies
poetry install
# install plugin to work with flake8
poetry run python setup.py install
# test
poetry run pytest
# or with watch
poetry run ptw
# typecheck
poetry run mypy *.py
# format
poetry run black .
# lint
poetry run flake8 .
uploading a new version to PyPi
# increment `Flake8PieCheck.version` and pyproject.toml `version`
# build new distribution files and upload to pypi
# Note: this will ask for login credentials
rm -rf dist && poetry publish --build
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file flake8-pie-0.4.0.tar.gz.
File metadata
- Download URL: flake8-pie-0.4.0.tar.gz
- Upload date:
- Size: 5.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/0.12.11 CPython/3.7.3 Darwin/18.6.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
09c71b6a52c08ee9f8bd8da5a5cd4a7a9a0ee2906b46472a66830bab085be26c
|
|
| MD5 |
50dc79e646421546164c83ee2d6a40a3
|
|
| BLAKE2b-256 |
6e2f737139ce3ada9c94c79e6307f9f09ff4bee2c1cef511b6195d3eeed915fc
|
File details
Details for the file flake8_pie-0.4.0-py3-none-any.whl.
File metadata
- Download URL: flake8_pie-0.4.0-py3-none-any.whl
- Upload date:
- Size: 11.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/0.12.11 CPython/3.7.3 Darwin/18.6.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
95ceb14440429de6e445504db4f0e2ff7a80d227fb7ef68548ce5ac74751a60e
|
|
| MD5 |
8cd62771866172b7b2e643bb86f10ce6
|
|
| BLAKE2b-256 |
4f8e1a4afc20c85ea7e7e24252b8a244445a2c1ed0dccfcf30edab41a81b5d2d
|