Changelog¶
26.6.1¶
Add ASYNC127 unmaintained-httpx: use
httpx2instead ofhttpx, which is no longer maintained, to get security updates. (issue #460)ASYNC210, ASYNC211 and ASYNC212 now also detect blocking calls made through
httpx2, and their messages recommendhttpx2.AsyncClientinstead ofhttpx.AsyncClient.
26.4.2¶
Fixed a regression in canonical-qualname resolution where a call nested inside an attribute chain (e.g.
foo("x").bar) was silently elided into a dotted name ("foo.bar"). This caused ASYNC200 false alarms for patterns like*session.getmatchingread_session("a").get(...), where.getis a method on the return value ofread_session().
26.4.1¶
Rules resolve function/class references via the canonical qualname, so checks fire regardless of import style (
import trio,import trio as t,from trio import open_nursery [as on], …). Only module-level imports are tracked. (issue #132)ASYNC106 is now disabled by default; re-enable it to enforce the
import triostyle.Autofix for ASYNC910 / ASYNC911 no longer inserts checkpoints inside
exceptclauses (which would trigger ASYNC120); instead the checkpoint is added at the top of the function or of the enclosing loop. (issue #403)ASYNC910 and ASYNC911 now accept
__aenter__/__aexit__methods when the partner method provides the checkpoint, or when only one of the two is defined on a class that inherits from another class (charitably assuming the partner is inherited and contains a checkpoint). (issue #441)ASYNC300 no longer triggers when the result of
asyncio.create_task()is returned from a function. (issue #398)Add ASYNC126 exceptiongroup-subclass-missing-derive. (issue #334)
ASYNC102 no longer warns on
await trio.aclose_forcefully(...)/await anyio.aclose_forcefully(...), which are designed for cleanup and cancel immediately by design. (issue #446)ASYNC101 now also triggers for common third-party context managers that open internal cancel scopes, nurseries, or task groups:
trio_websocket.{open_websocket, open_websocket_url, serve_websocket},trio_asyncio.open_loop,trio_parallel.open_worker_context,trio_util.{move_on_when, run_and_cancelling},qtrio.{open_emissions_nursery, enter_emissions_channel},anyio.from_thread.{BlockingPortal, start_blocking_portal},asgi_lifespan.LifespanManager,apscheduler.AsyncScheduler,mcp.client.streamable_http.streamablehttp_client, andmcp.client.sse.sse_client. (issue #350)ASYNC102 and ASYNC120 no longer trigger on
await trio.lowlevel.cancel_shielded_checkpoint()(or theanyio.lowlevelequivalent), which is explicitly a schedule-but-not-cancel point and therefore safe insidefinally/ cancelledexcept/__aexit__.
25.7.1¶
ASYNC102 no longer triggered for asyncio due to different cancellation semantics it uses.
25.5.3¶
25.5.2¶
ASYNC102 and ASYNC120 no longer requires cancel scopes to have a timeout. (issue #272)
Add ASYNC400 except-star-invalid-attribute.
25.5.1¶
Fixed ASYNC113 false alarms if the
start_sooncalls are in a nursery cm that was closed before the yield point.
25.4.4¶
ASYNC900 now accepts and recommends
trio.as_safe_channel().
25.4.3¶
ASYNC100 can now autofix
withstatements with multiple items.Fixed a bug where multiple
withitems would not interact, leading to ASYNC100 and ASYNC9xx false alarms. (issue #367)
25.4.2¶
Add ASYNC125 constant-absolute-deadline.
25.4.1¶
Add match-case (structural pattern matching) support to ASYNC103, 104, 910, 911 & 912.
25.3.1¶
Add except* support to ASYNC102, 103, 104, 120, 910, 911, 912.
25.2.3¶
No longer require
flake8for installation… so if you require support for config files you must installflake8-async[flake8].
25.2.2¶
ASYNC113 now only triggers on
trio.[serve_tcp, serve_ssl_over_tcp, serve_listeners, run_process], instead of accepting anything as the attribute base. (e.g.anyio.run_process()is not startable).
25.2.1¶
ASYNC912 and ASYNC913 will now trigger if there’s no cancel points. This means that
trio.open_nursery()/anyio.create_task_group will not silence them on their own, unless they’re guaranteed to start tasks.
25.1.1¶
24.11.4¶
ASYNC100 once again ignores
trio.open_nursery()andanyio.create_task_group(), unless we find a call to.start_soon().
24.11.3¶
Revert ASYNC100 ignoring
trio.open_nursery()andanyio.create_task_group()due to it not viewing.start_soon()as introducing a cancel point.
24.11.2¶
Fix crash in
Visitor91xonasync with a().b():.
24.11.1¶
ASYNC100 now ignores
trio.open_nursery()andanyio.create_task_group()as cancellation sources, because they are schedule points but not cancellation points.ASYNC101 and ASYNC119 are now silenced for decorators in transform-async-generator-decorators.
24.10.2¶
ASYNC102 now also warns about
await()inside__aexit__.
24.10.1¶
Add ASYNC123 bad-exception-group-flattening.
24.9.5¶
Fix crash when analyzing code with infinite loop inside context manager.
24.9.4¶
Add ASYNC122 delayed-entry-of-relative-cancelscope.
24.9.3¶
ASYNC102 and ASYNC120: - handles nested cancel scopes - detects internal cancel scopes of nurseries as a way to shield&deadline - no longer treats
trio.open_nursery()oranyio.create_task_group()as cancellation sources - handles the shield parameter totrio.fail_after()and friends (added in trio 0.27)
24.9.2¶
24.9.1¶
Add ASYNC121 control-flow-in-taskgroup.
24.8.1¶
Add config option transform-async-generator-decorators, to list decorators which suppress ASYNC900.
24.6.1¶
24.5.6¶
Make ASYNC913 disabled by default, as originally intended.
24.5.5¶
Add ASYNC300 create-task-no-reference.
24.5.4¶
Add ASYNC913: Indefinite loop with no guaranteed checkpoint.
Fix bugs in ASYNC910 and ASYNC911 autofixing where they sometimes didn’t add a library import.
Fix crash in ASYNC911 when trying to autofix a one-line
while ...: yieldAdd exception-suppress-context-managers. Contextmanagers that may suppress exceptions.
ASYNC91x now treats checkpoints inside
with contextlib.suppressas unreliable.
24.5.3¶
Rename config option
trio200-blocking-callsto async200-blocking-calls.trio200-blocking-callsis now deprecated.
24.5.2¶
ASYNC101 now also warns on anyio & asyncio taskgroups.
Fixed a bug where ASYNC101 and ASYNC91x would not recognize decorators with parameters directly imported. I.e.
@fixture(...)will now suppress errors.
24.5.1¶
Add ASYNC912: no checkpoints in with statement are guaranteed to run.
ASYNC100 now properly treats async for comprehensions as checkpoints.
ASYNC100 now supports autofixing on asyncio.
24.4.2¶
Add ASYNC119: yield in contextmanager in async generator.
24.4.1¶
ASYNC91X: fix internal error caused by multiple
try/exceptincorrectly sharing state.
24.3.6¶
ASYNC100 no longer triggers if a context manager contains a
yield.
24.3.5¶
ASYNC102 (no await inside finally or critical except) no longer raises warnings for calls to
aclose()on objects in trio/anyio code. See (issue #156)
24.3.4¶
ASYNC110 (don’t loop sleep) now also warns if looping
[trio/anyio].lowlevel.checkpoint().
24.3.3¶
Add ASYNC251:
time.sleep()in async method.
24.3.2¶
Add ASYNC250: blocking sync call
input()in async method.
24.3.1¶
Removed TRIO117, MultiError removed in trio 0.24.0
Renamed the library from flake8-trio to flake8-async, to indicate the checker supports more than just
trio.Renamed all error codes from TRIOxxx to ASYNCxxx
Renamed the binary from flake8-trio to flake8-async
Lots of internal renaming.
Added asyncio support for several error codes
added
--library
23.5.1¶
TRIO91X now supports comprehensions
TRIO100 and TRIO91X now supports autofixing
Renamed
--enable-visitor-codes-regexto--enableAdded
--disable,--autofixand--error-on-autofix
23.2.5¶
Fix false alarms for
@pytest.fixture-decorated functions in TRIO101, TRIO910 and TRIO911
23.2.4¶
Fix TRIO900 false alarm on nested functions
TRIO113 now also works on
anyio.TaskGroup
23.2.3¶
Fix
get_matching_callwhen passed a single string as base. Resolves possibly several false alarms, TRIO210 among them.
23.2.2¶
Rename TRIO107 to TRIO910, and TRIO108 to TRIO911, and making them optional by default.
Allow
@pytest.fixture()-decorated async generators, since they’re morally context managersAdd support for checking code written against AnyIO
Add TRIO118: Don’t assign the value of
anyio.get_cancelled_exc_class()to a variable, since that breaks linter checks and multi-backend programs.
23.2.1¶
TRIO103 and TRIO104 no longer triggers when
trio.Cancelledhas been handled in previous except handlers.Add TRIO117: Reference to deprecated
trio.[NonBase]MultiError; use[Base]ExceptionGroupinstead.Add TRIO232: blocking sync call on file object.
Add TRIO212: blocking sync call on
httpx.Clientobject.Add TRIO222: blocking sync call to
os.wait*TRIO221 now also looks for
os.posix_spawn[p]
23.1.4¶
TRIO114 avoids a false alarm on posonly args named “task_status”
TRIO116 will now match on any attribute parameter named
.inf, not justmath.inf.TRIO900 now only checks
@asynccontextmanager, not other decorators passed with –no-checkpoint-warning-decorators.
23.1.3¶
Add TRIO240: usage of
os.pathin async function.Add TRIO900: ban async generators not decorated with known safe decorator
23.1.2¶
Add TRIO230, TRIO231 - sync IO calls in async function
23.1.1¶
Add TRIO210, TRIO211 - blocking sync call in async function, using network packages (requests, httpx, urllib3)
Add TRIO220, TRIO221 - blocking sync call in async function, using subprocess or os.
22.12.5¶
The
--startable-in-context-managerand--trio200-blocking-callsoptions now handle spaces and newlines.Now compatible with flake8-noqa NQA102 and NQA103 checks.
22.12.4¶
TRIO200 no longer warns on directly awaited calls
22.12.3¶
Worked around configuration-parsing bug for TRIO200 warning (more to come)
22.12.2¶
Add TRIO200: User-configured blocking sync call in async function
22.12.1¶
TRIO114 will now trigger on the unqualified name, will now only check the first parameter directly, and parameters to function calls inside that.
TRIO113 now only supports names that are valid identifiers, rather than fnmatch patterns.
Add TRIO115: Use
trio.lowlevel.checkpoint()instead oftrio.sleep(0).
22.11.5¶
Add TRIO116:
trio.sleep()with >24 hour interval should usually betrio.sleep_forever().
22.11.4¶
Add TRIO114 Startable function not in
--startable-in-context-managerparameter list.
22.11.3¶
Add TRIO113, prefer
await nursery.start(...)tonursery.start_soon()for compatible functions when opening a context manager
22.11.2¶
TRIO105 now also checks that you
awaitednursery.start().
22.11.1¶
TRIO102 is no longer skipped in (async) context managers, since it’s not a missing-checkpoint warning.
22.9.2¶
Fix a crash on nontrivial decorator expressions (calls, PEP 614) and document behavior.
22.9.1¶
Add
--no-checkpoint-warning-decoratorsoption, to disable missing-checkpoint warnings for certain decorated functions.
22.8.8¶
Fix false alarm on TRIO107 with checkpointing
tryand emptyfinallyFix false alarm on TRIO107&108 with infinite loops
22.8.7¶
TRIO107+108 now ignores
asynccontextmanager`s, since both `__aenter__and__aexit__should checkpoint.async withis 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
whileconditions andforiterables 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.
raisein else is guaranteed to run unless there’s abreakin the body.
22.8.5¶
Add TRIO111: Variable, from context manager opened inside nursery, passed to
start[_soon]might be invalidly accessed 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
timeoutparameter. 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 BaseExceptionandexcept trio.CancelledExtend TRIO104 to also check for
yieldUpdate error messages on TRIO102 and TRIO103
22.7.5¶
Add TRIO103:
except BaseExceptionorexcept trio.Cancelledwith a code path that doesn’t re-raiseAdd 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
TRIO100false-alarms on cancel scopes containingasync fororasync with.
22.7.1¶
Initial release with TRIO100 and TRIO101