Skip to content

Releases: python-trio/trio

v0.25.1

16 May 06:34
Compare
Choose a tag to compare

Full Changelog: v0.25.0...v0.25.1

Bugfixes

  • Fix crash when importing trio in embedded Python on Windows, and other installs that remove docstrings. (#2987)

v0.25.0

17 Mar 02:59
Compare
Choose a tag to compare

Full Changelog: v0.24.0...v0.25.0

Breaking changes

  • The strict_exception_groups parameter now defaults to True in trio.run and trio.lowlevel.start_guest_run. trio.open_nursery still defaults to the same value as was specified in trio.run/trio.lowlevel.start_guest_run, but if you didn't specify it there then all subsequent calls to trio.open_nursery will change.
    This is unfortunately very tricky to change with a deprecation period, as raising a DeprecationWarning whenever strict_exception_groups is not specified would raise a lot of unnecessary warnings.

    Notable side effects of changing code to run with strict_exception_groups==True

    • If an iterator raises StopAsyncIteration or StopIteration inside a nursery, then python will not recognize wrapped instances of those for stopping iteration.

    • trio.run_process is now documented that it can raise an ExceptionGroup. It previously could do this in very rare circumstances, but with strict_exception_groups set to True it will now do so whenever exceptions occur in deliver_cancel or with problems communicating with the subprocess.

      • Errors in opening the process is now done outside the internal nursery, so if code previously ran with strict_exception_groups=True there are cases now where an ExceptionGroup is no longer added.
    • trio.TrioInternalError .__cause__ might be wrapped in one or more ExceptionGroups <ExceptionGroup> (#2786)

Features

  • Add trio.testing.wait_all_threads_completed, which blocks until no threads are running tasks. This is intended to be used in the same way as trio.testing.wait_all_tasks_blocked. (#2937)

  • Path is now a subclass of pathlib.PurePath, allowing it to interoperate with other standard
    pathlib types.

    Instantiating Path now returns a concrete platform-specific subclass, one of PosixPath or
    WindowsPath, matching the behavior of pathlib.Path. (#2959)

Bugfixes

  • The pthread functions are now correctly found on systems using vanilla versions of musl libc. (#2939)

Miscellaneous internal changes

  • use the regular readme for the PyPI long_description (#2866)

v0.24.0

10 Jan 03:33
Compare
Choose a tag to compare

Full Changelog: v0.23.2...v0.24.0

Features

  • New helper classes: testing.RaisesGroup and testing.Matcher.

    In preparation for changing the default of strict_exception_groups to True, we're introducing a set of helper classes that can be used in place of pytest.raises in tests, to check for an expected ExceptionGroup.
    These are provisional, and only planned to be supplied until there's a good solution in pytest. See pytest-dev/pytest#11538 (#2785)

Deprecations and removals

  • MultiError has been fully removed, and all relevant trio functions now raise ExceptionGroups instead. This should not affect end users that have transitioned to using except* or catching ExceptionGroup/BaseExceptionGroup. (#2891)

v0.23.2

14 Dec 04:25
Compare
Choose a tag to compare

Full Changelog: v0.23.1...v0.23.2

Features

  • TypeVarTuple is now used to fully type nursery.start_soon(), trio.run(), trio.to_thread.run_sync(), and other similar functions accepting (func, *args). This means type checkers will be able to verify types are used correctly. nursery.start() is not fully typed yet however. (#2881)

Bugfixes

  • Make pyright recognize open_memory_channel as generic. (#2873)

Miscellaneous internal changes

  • Moved the metadata into PEP621-compliant pyproject.toml. (#2860)
  • do not depend on exceptiongroup pre-release (#2861)
  • Move .coveragerc into pyproject.toml (#2867)

v0.23.1

04 Nov 05:59
Compare
Choose a tag to compare

Full Changelog: v0.23.0...v0.23.1

Bugfixes

  • Don't crash on import in Anaconda interpreters. (#2855)

v0.23.0

03 Nov 05:34
Compare
Choose a tag to compare

Full Changelog: v0.22.2...v0.23.0

Headline features

  • Add type hints. (#543)

Features

  • When exiting a nursery block, the parent task always waits for child tasks to exit. This wait cannot be cancelled. However, previously, if you tried to cancel it, it would inject a Cancelled exception, even though it wasn't cancelled. Most users probably never noticed either way, but injecting a Cancelled here is not really useful, and in some rare cases caused confusion or problems, so Trio no longer does that. (#1457)
  • If called from a thread spawned by trio.to_thread.run_sync, trio.from_thread.run and trio.from_thread.run_sync now reuse the task and cancellation status of the host task; this means that context variables and cancel scopes naturally propagate 'through' threads spawned by Trio. You can also use trio.from_thread.check_cancelled to efficiently check for cancellation without reentering the Trio thread. (#2392)
  • trio.lowlevel.start_guest_run now does a bit more setup of the guest run before it returns to its caller, so that the caller can immediately make calls to trio.current_time, trio.lowlevel.spawn_system_task, trio.lowlevel.current_trio_token, etc. (#2696)

Bugfixes

  • When a starting function raises before calling trio.TaskStatus.started, trio.Nursery.start will no longer wrap the exception in an undocumented ExceptionGroup. Previously, trio.Nursery.start would incorrectly raise an ExceptionGroup containing it when using trio.run(..., strict_exception_groups=True). (#2611)

Deprecations and removals

  • To better reflect the underlying thread handling semantics, the keyword argument for trio.to_thread.run_sync that was previously called cancellable is now named abandon_on_cancel. It still does the same thing -- allow the thread to be abandoned if the call to trio.to_thread.run_sync is cancelled -- but since we now have other ways to propagate a cancellation without abandoning the thread, "cancellable" has become somewhat of a misnomer. The old cancellable name is now deprecated. (#2841)
  • Deprecated support for math.inf for the backlog argument in open_tcp_listeners, making its docstring correct in the fact that only TypeError is raised if invalid arguments are passed. (#2842)

Removals without deprecations

  • Drop support for Python3.7 and PyPy3.7/3.8. (#2668)
  • Removed special MultiError traceback handling for IPython. As of version 8.15 ExceptionGroup is handled natively. (#2702)

Miscellaneous internal changes

  • Trio now indicates its presence to sniffio using the sniffio.thread_local interface that is preferred since sniffio v1.3.0. This should be less likely than the previous approach to cause sniffio.current_async_library to return incorrect results due to unintended inheritance of contextvars. (#2700)
  • On windows, if SIO_BASE_HANDLE failed and SIO_BSP_HANDLE_POLL didn't return a different socket, runtime error will now raise from the OSError that indicated the issue so that in the event it does happen it might help with debugging. (#2807)

0.22.2

12 Jul 23:13
Compare
Choose a tag to compare

Full Changelog: v0.22.1...v0.22.2

Bugfixes

  • Fix PermissionError when importing trio due to trying to access pthread. (#2688)