Version history¶
This library adheres to Semantic Versioning 2.0.
1.4.0
Added async name resolution functions (
anyio.getaddrinfo()
andanyio.getnameinfo()
)Added the
family
andreuse_address
parameters toanyio.create_udp_socket()
(Enables multicast support; test contributed by Matthias Urlichs)Fixed
fail.after(0)
not raising a timeout error on asyncio and curioFixed
move_on_after()
andfail_after()
getting stuck on curio in some circumstancesFixed socket operations not allowing timeouts to cancel the task
Fixed API documentation on
Stream.receive_until()
which claimed that the delimiter will be included in the returned data when it really isn’tHarmonized the default task names across all backends
wait_all_tasks_blocked()
no longer considers tasks waiting onsleep(0)
to be blocked on asyncio and curioFixed the type of the
address
parameter inUDPSocket.send()
to includeIPAddress
objects (which were already supported by the backing implementation)Fixed
UDPSocket.send()
to resolve host names usinganyio.getaddrinfo()
before callingsocket.sendto()
to avoid blocking on synchronous name resolutionSwitched to using
anyio.getaddrinfo()
for name lookups
1.3.1
Fixed warnings caused by trio 0.15
Worked around a compatibility issue between uvloop and Python 3.9 (missing
shutdown_default_executor()
method)
1.3.0
Fixed compatibility with Curio 1.0
Made it possible to assert fine grained control over which AnyIO backends and backend options are being used with each test
Added the
address
andpeer_address
properties to theSocketStream
interface
1.2.3
Repackaged release (v1.2.2 contained extra files from an experimental branch which broke imports)
1.2.2
Fixed
CancelledError
leaking from a cancel scope on asyncio if the task previously received a cancellation exceptionFixed
AttributeError
when cancelling a generator-based task (asyncio)Fixed
wait_all_tasks_blocked()
not working with generator-based tasks (asyncio)Fixed an unnecessary delay in
connect_tcp()
if an earlier attempt succeedsFixed
AssertionError
inconnect_tcp()
if multiple connection attempts succeed simultaneously
1.2.1
Fixed cancellation errors leaking from a task group when they are contained in an exception group
Fixed trio v0.13 compatibility on Windows
Fixed inconsistent queue capacity across backends when capacity was defined as 0 (trio = 0, others = infinite)
Fixed socket creation failure crashing
connect_tcp()
1.2.0
Added the possibility to parametrize regular pytest test functions against the selected list of backends
Added the
set_total_tokens()
method toCapacityLimiter
Added the
anyio.current_default_thread_limiter()
functionAdded the
cancellable
parameter toanyio.run_in_thread()
Implemented the Happy Eyeballs (RFC 6555) algorithm for
anyio.connect_tcp()
Fixed
KeyError
on asyncio and curio where entering and exiting a cancel scope happens in different tasksFixed deprecation warnings on Python 3.8 about the
loop
argument ofasyncio.Event()
Forced the use
WindowsSelectorEventLoopPolicy
inasyncio.run
when on Windows and asyncio to keep network functionality workingWorker threads are now spawned with
daemon=True
on all backends, not just trioDropped support for trio v0.11
1.1.0
Added the
lock
parameter toanyio.create_condition()
(PR by Matthias Urlichs)Added async iteration for queues (PR by Matthias Urlichs)
Added capacity limiters
Added the possibility of using capacity limiters for limiting the maximum number of threads
Fixed compatibility with trio v0.12
Fixed IPv6 support in
create_tcp_server()
,connect_tcp()
andcreate_udp_socket()
Fixed mishandling of task cancellation while the task is running a worker thread on asyncio and curio
1.0.0
Fixed pathlib2 compatibility with
anyio.aopen()
Fixed timeouts not propagating from nested scopes on asyncio and curio (PR by Matthias Urlichs)
Fixed incorrect call order in socket close notifications on asyncio (mostly affecting Windows)
Prefixed backend module names with an underscore to better indicate privateness
1.0.0rc2
Fixed some corner cases of cancellation where behavior on asyncio and curio did not match with that of trio. Thanks to Joshua Oreman for help with this.
Fixed
current_effective_deadline()
not taking shielded cancellation scopes into account on asyncio and curioFixed task cancellation not happening right away on asyncio and curio when a cancel scope is entered when the deadline has already passed
Fixed exception group containing only cancellation exceptions not being swallowed by a timed out cancel scope on asyncio and curio
Added the
current_time()
functionReplaced
CancelledError
withget_cancelled_exc_class()
Added support for Hypothesis
Added support for PEP 561
Use uvloop for the asyncio backend by default when available (but only on CPython)
1.0.0rc1
Fixed
setsockopt()
passing options to the underlying method in the wrong mannerFixed cancellation propagation from nested task groups
Fixed
get_running_tasks()
returning tasks from other event loopsAdded the
parent_id
attribute toanyio.TaskInfo
Added the
get_current_task()
functionAdded guards to protect against concurrent read/write from/to sockets by multiple tasks
Added the
notify_socket_close()
function
1.0.0b2
Added introspection of running tasks via
anyio.get_running_tasks()
Added the
getsockopt()
andsetsockopt()
methods to theSocketStream
APIFixed mishandling of large buffers by
BaseSocket.sendall()
Fixed compatibility with (and upgraded minimum required version to) trio v0.11
1.0.0b1
Initial release