Skip to main content

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(...): 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: 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.

Changelog

CalVer, YY.month.patch

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

Project details


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.7.5.tar.gz (16.5 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.7.5-py3-none-any.whl (8.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: flake8-trio-22.7.5.tar.gz
  • Upload date:
  • Size: 16.5 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.7.5.tar.gz
Algorithm Hash digest
SHA256 da50921f7838f0dc5f1c2af913721b1bb080da36dc59efa37b25eff47ad4a842
MD5 359f4a314faad3135f161eab378d8975
BLAKE2b-256 d443fca8b805a03b7a9d7d6d9d33497c291236b8b5e02951fca9dbad4273a859

See more details on using hashes here.

File details

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

File metadata

  • Download URL: flake8_trio-22.7.5-py3-none-any.whl
  • Upload date:
  • Size: 8.7 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.7.5-py3-none-any.whl
Algorithm Hash digest
SHA256 63c80794973db4fa5c95a834e77a7e6c26812d31cf30c4d37019e1b9a6d46c4a
MD5 c92c4e5e749424e5551b0b3ebd7047ae
BLAKE2b-256 1317f42bb088a32820504dff818e2d22c0d7b556674b8905ea4f5bafa133dacd

See more details on using hashes here.

Supported by

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