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

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.1.tar.gz (17.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

flake8_trio-22.8.1-py3-none-any.whl (9.3 kB view details)

Uploaded Python 3

File details

Details for the file flake8-trio-22.8.1.tar.gz.

File metadata

  • Download URL: flake8-trio-22.8.1.tar.gz
  • Upload date:
  • Size: 17.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.5

File hashes

Hashes for flake8-trio-22.8.1.tar.gz
Algorithm Hash digest
SHA256 52ef183263fa428a834bef1e2c1f35a746fb58e4c105d6d5e1210f35846b2a73
MD5 f4dd22671c00076d530ddcfd66ea66c6
BLAKE2b-256 d52d4ec3701fc9b6632691e7ca8f0193df6034a1c42ad0a0ba7998ca08dd32d0

See more details on using hashes here.

File details

Details for the file flake8_trio-22.8.1-py3-none-any.whl.

File metadata

  • Download URL: flake8_trio-22.8.1-py3-none-any.whl
  • Upload date:
  • Size: 9.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.5

File hashes

Hashes for flake8_trio-22.8.1-py3-none-any.whl
Algorithm Hash digest
SHA256 09634c95d178e2f37fa876d55e483c24829a0b06eb66ec97db896d31115b2da7
MD5 664ff737c34dccdd718baadef062b56d
BLAKE2b-256 e1caa1a7a6f474fa7b0e8fe695da16ebc745ee8248ffe9e4d37fd37a744d1955

See more details on using hashes here.

Release history Release notifications | RSS feed

24.3.9

2 files

24.3.8.2

2 files

24.3.8

2 files

23.5.1

2 files

23.2.5

2 files

23.2.4

2 files

23.2.3

2 files

23.2.2

2 files

23.2.1

2 files

23.1.4

2 files

23.1.3

2 files

23.1.2

2 files

23.1.1

2 files

22.12.5

2 files

22.12.4

2 files

22.12.3

2 files

22.12.2

2 files

22.12.1

2 files

22.11.5

2 files

22.11.4

2 files

22.11.3

2 files

22.11.2

2 files

22.11.1

2 files

22.9.2

2 files

22.9.1

2 files

22.8.8

2 files

22.8.7

2 files

22.8.6

2 files

22.8.5

2 files

22.8.4

2 files

22.8.3

2 files

22.8.2

2 files

This release

22.8.1 This release

2 files

22.7.6

2 files

22.7.5

2 files

22.7.4

2 files

22.7.3

2 files

22.7.2

2 files

22.7.1

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page