A highly opinionated flake8 plugin for Trio-related problems.
Project description
flake8-trio
A highly opinionated flake8 plugin for Trio-related problems.
This can include anything from outright bugs, to pointless/dead code, to likely performance issues, to minor points of idiom that might signal a misunderstanding.
It may well be too noisy for anyone with different opinions, that's OK.
Pairs well with flake8-async and flake8-bugbear.
Installation
pip install flake8-trio
List of warnings
- TRIO100: a
with trio.fail_after(...):
orwith trio.move_on_after(...):
context does not contain anyawait
statements. This makes it pointless, as the timeout can only be triggered by a checkpoint. - TRIO101:
yield
inside a nursery or cancel scope is only safe when implementing a context manager - otherwise, it breaks exception handling. - TRIO102: it's unsafe to await inside
finally:
orexcept BaseException/trio.Cancelled
unless you use a shielded cancel scope with a timeout. - TRIO103:
except BaseException
andexcept trio.Cancelled
with a code path that doesn't re-raise. - TRIO104:
Cancelled
andBaseException
must be re-raised - when a user tries toreturn
orraise
a different exception. - TRIO105: Calling a trio async function without immediately
await
ing it. - TRIO106: trio must be imported with
import trio
for the linter to work. - TRIO107: exit or
return
from async function with no guaranteed checkpoint or exception since function definition. - TRIO108: exit, yield or return from async iterable with no guaranteed checkpoint since possible function entry (yield or function definition)
Checkpoints are
await
,async for
, andasync with
(on one of enter/exit). - TRIO109: Async function definition with a
timeout
parameter - usetrio.[fail/move_on]_[after/at]
instead - TRIO110:
while <condition>: await trio.sleep()
should be replaced by atrio.Event
. - TRIO111: Variable, from context manager opened inside nursery, passed to
start[_soon]
might be invalidly accesed while in use, due to context manager closing before the nursery. This is usually a bug, and nurseries should generally be the inner-most context manager. - TRIO112: nursery body with only a call to
nursery.start[_soon]
and not passing itself as a parameter can be replaced with a regular function call.
Changelog
22.8.7
- TRIO107+108 now ignores
asynccontextmanager
s, since both__aenter__
and__aexit__
should checkpoint.async with
is also treated as checkpointing on both enter and exit. - TRIO107 now completely ignores any function whose body consists solely of ellipsis, pass, or string constants.
- TRIO103, 107 and 108 now inspects
while
conditions andfor
iterables to avoid false alarms on a couple cases where the loop body is guaranteed to run at least once.
22.8.6
- TRIO103 now correctly handles raises in loops, i.e.
raise
in else is guaranteed to run unless there's abreak
in the body.
22.8.5
- Add TRIO111: Variable, from context manager opened inside nursery, passed to
start[_soon]
might be invalidly accesed while in use, due to context manager closing before the nursery. This is usually a bug, and nurseries should generally be the inner-most context manager. - Add TRIO112: this single-task nursery could be replaced by awaiting the function call directly.
22.8.4
- Fix TRIO108 raising errors on yields in some sync code.
- TRIO109 now skips all decorated functions to avoid false alarms
22.8.3
- TRIO108 now gives multiple error messages; one for each path lacking a guaranteed checkpoint
22.8.2
- Merged TRIO108 into TRIO107
- TRIO108 now handles checkpointing in async iterators
22.8.1
- Added TRIO109: Async definitions should not have a
timeout
parameter. Usetrio.[fail/move_on]_[at/after]
- Added TRIO110:
while <condition>: await trio.sleep()
should be replaced by atrio.Event
.
22.7.6
- Extend TRIO102 to also check inside
except BaseException
andexcept trio.Cancelled
- Extend TRIO104 to also check for
yield
- Update error messages on TRIO102 and TRIO103
22.7.5
- Add TRIO103:
except BaseException
orexcept trio.Cancelled
with a code path that doesn't re-raise - Add TRIO104: "Cancelled and BaseException must be re-raised" if user tries to return or raise a different exception.
- Added TRIO107: Async functions must have at least one checkpoint on every code path, unless an exception is raised
- Added TRIO108: Early return from async function must have at least one checkpoint on every code path before it.
22.7.4
- Added TRIO105 check for not immediately
await
ing async trio functions. - Added TRIO106 check that trio is imported in a form that the plugin can easily parse.
22.7.3
- Added TRIO102 check for unsafe checkpoints inside
finally:
blocks
22.7.2
- Avoid
TRIO100
false-alarms on cancel scopes containingasync for
orasync with
.
22.7.1
- Initial release with TRIO100 and TRIO101
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
flake8-trio-22.8.7.tar.gz
(28.7 kB
view hashes)
Built Distribution
Close
Hashes for flake8_trio-22.8.7-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5b90f00cdb7cfb363fa6ab84d5d65f978c7af0f82ed21605c9e6d5c561808925 |
|
MD5 | 629dd2e09f38006a2bba57572268c3b3 |
|
BLAKE2b-256 | 32f7300b93d60d57e5000b23ae226ae358e567147cd3a8756d8cbaec22310d32 |