Skip to main content

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(...): or with trio.move_on_after(...): context does not contain any await 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: or except BaseException/trio.Cancelled unless you use a shielded cancel scope with a timeout.
  • TRIO103: except BaseException and except trio.Cancelled with a code path that doesn't re-raise. Note that any raise statements in loops are ignored since it's tricky to parse loop flow with break, continue and/or the zero-iteration case.
  • TRIO104: Cancelled and BaseException must be re-raised - when a user tries to return or raise a different exception.
  • TRIO105: Calling a trio async function without immediately awaiting it.
  • TRIO106: trio must be imported with import trio for the linter to work.
  • TRIO107: Async functions must have at least one checkpoint on every code path, unless an exception is raised.
  • TRIO108: Early return from async function must have at least one checkpoint on every code path before it, unless an exception is raised. Checkpoints are await, async with async for.
  • TRIO109: Async function definition with a timeout parameter - use trio.[fail/move_on]_[after/at] instead
  • TRIO110: while <condition>: await trio.sleep() should be replaced by a trio.Event.

Changelog

CalVer, YY.month.patch

22.8.1

  • Added TRIO109: Async definitions should not have a timeout parameter. Use trio.[fail/move_on]_[at/after]
  • Added TRIO110: while <condition>: await trio.sleep() should be replaced by a trio.Event.

22.7.6

  • Extend TRIO102 to also check inside except BaseException and except trio.Cancelled
  • Extend TRIO104 to also check for yield
  • Update error messages on TRIO102 and TRIO103

22.7.5

  • Add TRIO103: except BaseException or except 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 awaiting 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 containing async for or async with.

22.7.1

  • Initial release with TRIO100 and TRIO101

Release files for flake8-trio 22.8.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for flake8-trio 22.8.1
File Size Uploaded
flake8-trio-22.8.1.tar.gz 17.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for flake8-trio 22.8.1
File Interpreter ABI Platform
flake8_trio-22.8.1-py3-none-any.whl Python 3 none any Details

Total release size: 27.1 kB

Release files / flake8-trio-22.8.1.tar.gz

Download URL flake8-trio-22.8.1.tar.gz
Size 17.8 kB
Tags Source
SHA-256 checksum
How to use checksums
52ef183263fa428a834bef1e2c1f35a746fb58e4c105d6d5e1210f35846b2a73
BLAKE2b-256 checksum
How to use checksums
d52d4ec3701fc9b6632691e7ca8f0193df6034a1c42ad0a0ba7998ca08dd32d0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.10.5

Release files / flake8_trio-22.8.1-py3-none-any.whl

Download URL flake8_trio-22.8.1-py3-none-any.whl
Size 9.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
09634c95d178e2f37fa876d55e483c24829a0b06eb66ec97db896d31115b2da7
BLAKE2b-256 checksum
How to use checksums
e1caa1a7a6f474fa7b0e8fe695da16ebc745ee8248ffe9e4d37fd37a744d1955
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.10.5
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page