Bumps anyio from 4.6.2.post1 to 4.9.0.
Release notes
Sourced from anyio's releases.
4.9.0
- Added async support for temporary file handling (#344; PR by
@11kkw
)
- Added 4 new fixtures for the AnyIO
pytest
plugin:
free_tcp_port_factory
: session scoped fixture returning a callable that generates unused TCP port numbers
free_udp_port_factory
: session scoped fixture returning a callable that generates unused UDP port numbers
free_tcp_port
: function scoped fixture that invokes the free_tcp_port_factory
fixture to generate a free TCP port number
free_udp_port
: function scoped fixture that invokes the free_udp_port_factory
fixture to generate a free UDP port number
- Added
stdin
argument to anyio.run_process()
akin to what anyio.open_process()
, asyncio.create_subprocess()
, trio.run_process()
, and subprocess.run()
already accept (PR by @jmehnle
)
- Added the
info
property to anyio.Path
on Python 3.14
- Changed
anyio.getaddrinfo()
to ignore (invalid) IPv6 name resolution results when IPv6 support is disabled in Python
- Changed
EndOfStream
raised from MemoryObjectReceiveStream.receive()
to leave out the AttributeError
from the exception chain which was merely an implementation detail and caused some confusion
- Fixed traceback formatting growing quadratically with level of
TaskGroup
nesting on asyncio due to exception chaining when raising ExceptionGroups
in TaskGroup.__aexit__
(#863; PR by @tapetersen
)
- Fixed
anyio.Path.iterdir()
making a blocking call in Python 3.13 (#873; PR by @cbornet
and @agronholm
)
- Fixed
connect_tcp()
producing cyclic references in tracebacks when raising exceptions (#809; PR by @graingert
)
- Fixed
anyio.to_thread.run_sync()
needlessly holding on to references of the context, function, arguments and others until the next work item on asyncio (PR by @Wankupi
)
4.8.0
- Added experimental support for running functions in subinterpreters on Python 3.13 and later
- Added support for the
copy()
, copy_into()
, move()
and move_into()
methods in anyio.Path
, available in Python 3.14
- Changed
TaskGroup
on asyncio to always spawn tasks non-eagerly, even if using a task factory created via asyncio.create_eager_task_factory()
, to preserve expected Trio-like task scheduling semantics (PR by @agronholm
and @graingert
)
- Configure
SO_RCVBUF
, SO_SNDBUF
and TCP_NODELAY
on the selector thread waker socket pair (this should improve the performance of wait_readable()
and wait_writable()
when using the ProactorEventLoop
) (#836; PR by @graingert
)
- Fixed
AssertionError
when using nest-asyncio
(#840)
- Fixed return type annotation of various context managers'
__exit__
method (#847; PR by @Enegg
)
4.7.0
- Updated
TaskGroup
to work with asyncio's eager task factories (#764)
- Added the
wait_readable()
and wait_writable()
functions which will accept an object with a .fileno()
method or an integer handle, and deprecated their now obsolete versions (wait_socket_readable()
and wait_socket_writable()
) (PR by @davidbrochart
)
- Changed
EventAdapter
(an Event
with no bound async backend) to allow set()
to work even before an async backend is bound to it (#819)
- Added support for
wait_readable()
and wait_writable()
on ProactorEventLoop
(used on asyncio + Windows by default)
- Fixed a misleading
ValueError
in the context of DNS failures (#815; PR by @graingert
)
- Fixed the return type annotations of
readinto()
and readinto1()
methods in the anyio.AsyncFile
class (#825)
- Fixed
TaskInfo.has_pending_cancellation()
on asyncio returning false positives in cleanup code on Python >= 3.11 (#832; PR by @gschaffner
)
- Fixed cancelled cancel scopes on asyncio calling
asyncio.Task.uncancel
when propagating a CancelledError
on exit to a cancelled parent scope (#790; PR by @gschaffner
)
Changelog
Sourced from anyio's changelog.
Version history
This library adheres to Semantic Versioning 2.0 <http://semver.org/>
_.
UNRELEASED
- Added context manager mix-in classes (
anyio.ContextManagerMixin
and
anyio.AsyncContextManagerMixin
) to help write classes that embed other context
managers, particularly cancel scopes or task groups
([#905](https://github.com/agronholm/anyio/issues/905) <https://github.com/agronholm/anyio/pull/905>
_; PR by by @agronholm
and
@tapetersen
)
- Added the ability to specify the thread name in
start_blocking_portal()
([#818](https://github.com/agronholm/anyio/issues/818) <https://github.com/agronholm/anyio/issues/818>
_; PR by @davidbrochart
)
- Added
anyio.notify_closing
to allow waking anyio.wait_readable
and anyio.wait_writable
before closing a socket. Among other things,
this prevents an OSError on the ProactorEventLoop
.
([#896](https://github.com/agronholm/anyio/issues/896) <https://github.com/agronholm/anyio/pull/896>
_; PR by @graingert
)
- Fixed
anyio.Path.copy()
and anyio.Path.copy_into()
failing on Python 3.14.0a7
- Fixed return annotation of
__aexit__
on async context managers. CMs which can
suppress exceptions should return bool
, or None
otherwise.
([#913](https://github.com/agronholm/anyio/issues/913) <https://github.com/agronholm/anyio/pull/913>
_; PR by @Enegg
)
- Fixed rollover boundary check in
SpooledTemporaryFile
so that rollover
only occurs when the buffer size exceeds max_size
([#915](https://github.com/agronholm/anyio/issues/915) <https://github.com/agronholm/anyio/pull/915>
_; PR by @11kkw
)
- Migrated testing and documentation dependencies from extras to dependency groups
4.9.0
-
Added async support for temporary file handling
([#344](https://github.com/agronholm/anyio/issues/344) <https://github.com/agronholm/anyio/issues/344>
_; PR by @11kkw
)
-
Added 4 new fixtures for the AnyIO pytest
plugin:
free_tcp_port_factory
: session scoped fixture returning a callable that
generates unused TCP port numbers
free_udp_port_factory
: session scoped fixture returning a callable that
generates unused UDP port numbers
free_tcp_port
: function scoped fixture that invokes the
free_tcp_port_factory
fixture to generate a free TCP port number
free_udp_port
: function scoped fixture that invokes the
free_udp_port_factory
fixture to generate a free UDP port number
-
Added stdin
argument to anyio.run_process()
akin to what
anyio.open_process()
, asyncio.create_subprocess_...()
, trio.run_process()
,
and subprocess.run()
already accept (PR by @jmehnle
)
-
Added the info
property to anyio.Path
on Python 3.14
-
Changed anyio.getaddrinfo()
to ignore (invalid) IPv6 name resolution results when
IPv6 support is disabled in Python
-
Changed EndOfStream
raised from MemoryObjectReceiveStream.receive()
to leave
out the AttributeError
from the exception chain which was merely an implementation
detail and caused some confusion
... (truncated)
Commits
a6e9ebb
Bumped up the version
9b9520d
Fixed cyclic references in to_thread.run_sync() on asyncio (#887)
1f04d6b
Added a note about asyncio cancellation semantics
e14b172
Upgraded to a newer Sphinx version
7e13c49
Avoid refcycles in tracebacks from happy eyeballs exceptions (#809)
d134da7
Raise EndOfStream from None in MemoryObjectReceiveStream.receive() (#889)
2840e06
Added cheaper implementation for no_other_refs() on Python 3.14 (#886)
31ce0a5
Added fixtures for generating bindable TCP/UDP ports (#856)
cd85e47
Test on PyPy 3.11 on CI (#876)
d228020
Detect blocking calls in coroutines using BlockBuster (#875)
- Additional commits viewable in compare view
Dependabot compatibility score
You can trigger a rebase of this PR by commenting @dependabot rebase
.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebase
will rebase this PR
@dependabot recreate
will recreate this PR, overwriting any edits that have been made to it
@dependabot merge
will merge this PR after your CI passes on it
@dependabot squash and merge
will squash and merge this PR after your CI passes on it
@dependabot cancel merge
will cancel a previously requested merge and block automerging
@dependabot reopen
will reopen this PR if it is closed
@dependabot close
will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
@dependabot show <dependency name> ignore conditions
will show all of the ignore conditions of the specified dependency
@dependabot ignore this major version
will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
@dependabot ignore this minor version
will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
@dependabot ignore this dependency
will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Note
Automatic rebases have been disabled on this pull request as it has been open for over 30 days.
Uh oh!
There was an error while loading. Please reload this page.
Bumps anyio from 4.6.2.post1 to 4.9.0.
Release notes
Sourced from anyio's releases.
Changelog
Sourced from anyio's changelog.
... (truncated)
Commits
a6e9ebb
Bumped up the version9b9520d
Fixed cyclic references in to_thread.run_sync() on asyncio (#887)1f04d6b
Added a note about asyncio cancellation semanticse14b172
Upgraded to a newer Sphinx version7e13c49
Avoid refcycles in tracebacks from happy eyeballs exceptions (#809)d134da7
Raise EndOfStream from None in MemoryObjectReceiveStream.receive() (#889)2840e06
Added cheaper implementation for no_other_refs() on Python 3.14 (#886)31ce0a5
Added fixtures for generating bindable TCP/UDP ports (#856)cd85e47
Test on PyPy 3.11 on CI (#876)d228020
Detect blocking calls in coroutines using BlockBuster (#875)Dependabot compatibility score
You can trigger a rebase of this PR by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebase
will rebase this PR@dependabot recreate
will recreate this PR, overwriting any edits that have been made to it@dependabot merge
will merge this PR after your CI passes on it@dependabot squash and merge
will squash and merge this PR after your CI passes on it@dependabot cancel merge
will cancel a previously requested merge and block automerging@dependabot reopen
will reopen this PR if it is closed@dependabot close
will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually@dependabot show <dependency name> ignore conditions
will show all of the ignore conditions of the specified dependency@dependabot ignore this major version
will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor version
will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependency
will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)