Release history

Trio 0.2.0 (coming soon)

[this has notes up to 3613ca6df]

Highlights

Async I/O for files and filesystem operations: trio.open_file(), trio.Path()

Complete support for TLS over arbitrary transports, including STARTTLS, renegotiation during full-duplex usage, and TLS-over-TLS: trio.open_ssl_over_tcp_stream(), trio.serve_ssl_over_tcp(), trio.open_ssl_over_tcp_listeners(), and trio.ssl

nursery.start (and rename spawn to start_soon)

High-level networking interface

testing helpers

Happy eyeballs

Task- and run-local storage (gh-2)

ParkingLot is rewritten to be simpler and faster (gh-272, gh-287)

trio.socket no longer overrides socket options

breaking: getprotobyname is now async getservbyport, getservbyname, getfqdn removed (they’re buggy and obsolete)

controlled way to override hostname resolution and socket behavior in tests (gh-170)

using yapf now

capacity limitation for threads (gh-10, gh-57, gh-156)

Reliably detect when someone tries to use an incompatible flavor of async library (e.g. asyncio or curio) and give a helpful error message

IDNA 2008 support in trio.socket (gh-11)

rename yield point to checkpoint

fix minor face condition in IOCP thread shutdown (gh-81)

switch to using set_wakeup_fd to detect control-C on Windows (gh-42)

lots of doc improvements

restrict_keyboard_interrupt_to_checkpoints

tiebreaker= argument to trio.testing.wait_all_tasks_blocked()

StrictFIFOLock

sendall no longer has partial result notification – this could be misleading with stream wrappers like SSLStream

ResourceBusyError

MultiError.catch() now correctly preserves __context__, despite Python’s bets attempts to stop us. (gh-165)

nursery.child_tasks, nursery.parent_task, task.child_nurseries, task.parent_nursery

Fix sock.accept() for IPv6 sockets (https://github.com/python-trio/trio/issues/164)

PyCharm (and hopefully other IDEs) offer better completions for the trio and trio.hazmat modules https://github.com/python-trio/trio/issues/314

deprecate most of the task and nursery APIs

make our exports visible to PyCharm (314)

Renames from https://github.com/python-trio/trio/issues/157

Note that pypy needs 5.9+ to support deprecations properly

Breaking changes and deprecations

Trio is a young project; link to issue #1

Breaking changes:

It turns out

Upcoming breaking changes without warnings (i.e., stuff that in 0.2.0 will work, but won’t work in 0.3.0):

  • In the next release, the bind method on Trio socket objects will become async (XX). Unfortunately, there’s no good way to warn about this. If you switch to the new highlevel networking APIs then then they’ll insulate you from this change.

Upcoming breaking changes with warnings (i.e., stuff that in 0.2.0 will work but complain loudly, and won’t work in 0.3.0):

sendall

run_in_worker_threadrun_sync_in_worker_thread nursery.spawnnursery.start_soon

current_call_soon_thread_and_signal_safetrio.hazmat.TrioToken run_in_trio_thread, await_in_trio_threadtrio.BlockingTrioPortal

deprecated big chunks of nursery and Task API

Features

  • New argument to trio.run(): restrict_keyboard_interrupt_to_checkpoints.

Trio 0.1.0 (2017-03-10)

  • Initial release.