Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Releases: python-trio/trio

v0.33.0

Choose a tag to compare

@A5rocks A5rocks released this 14 Feb 18:44

Full Changelog: v0.32.0...v0.33.0

Bugfixes

  • Start supporting Android's new "android" sys.platform. (#3357)

Deprecations and removals

  • Both trio.testing.RaisesGroup and trio.testing.Matcher have been deprecated. Pytest alternatives pytest.RaisesGroup and pytest.RaisesExc (respectively) are considered correct replacement. (#3326)

v0.32.0

Choose a tag to compare

@A5rocks A5rocks released this 31 Oct 07:21

Full Changelog: v0.31.0...v0.32.0

Features

  • Allow trio.CapacityLimiter to have zero total_tokens. (#3321)

Bugfixes

  • Fixed a bug where iterating over an @as_safe_channel-derived ReceiveChannel would raise trio.BrokenResourceError if the channel was closed by another task. It now shuts down cleanly. (#3331)
  • trio.lowlevel.Task.iter_await_frames now works on completed tasks, by returning an empty list of frames if the underlying coroutine has been closed. Previously, it raised an internal error. (#3337)

Removals without deprecations

  • Drop support for Python 3.9. (#3345)

Miscellaneous internal changes

  • Decrease indentation for exception groups raised in trio.as_safe_channel. (#3332)

v0.31.0

Choose a tag to compare

@A5rocks A5rocks released this 09 Sep 15:50

Full Changelog: v0.30.0...v0.31.0

Features

  • Cancelled strings can now display the source and reason for a cancellation. Trio-internal sources of cancellation will set this string, and CancelScope.cancel now has a reason string parameter that can be used to attach info to any Cancelled to help in debugging. (#3232)

Bugfixes

  • Make ctrl+c work in more situations in the Trio REPL (python -m trio). (#3007)
  • Allow pickling trio.Cancelled, as they can show up when you want to pickle something else. This does not rule out pickling other NoPublicConstructor objects -- create an issue if necessary. (#3248)
  • Decrease import time on Windows by around 10%. (#3263)
  • Handle unwrapping SystemExit/KeyboardInterrupt exception gracefully in utility function raise_single_exception_from_group that reraises last exception from group. (#3275)
  • Ensure that the DTLS server does not mutate SSL context. (#3277)
  • Avoid having trio.as_safe_channel raise if closing the generator wrapped
    GeneratorExit in a BaseExceptionGroup. (#3324)

Deprecations and removals

  • Implement bool(trio.Event) and have it raise a DeprecationWarning and tell users to use trio.Event.is_set instead. This is an alternative to mypy --enable-error-code=truthy-bool for users who don't use type checking. (#3322)

Miscellaneous internal changes

  • When misnesting nurseries you now get a helpful RuntimeError instead of a catastrophic TrioInternalError. (#3307)

v0.30.0

Choose a tag to compare

@A5rocks A5rocks released this 21 Apr 01:10

Full Changelog: v0.29.0...v0.30.0

Features

  • Add @trio.as_safe_channel, a wrapper that can be used to make async generators safe.
    This will be the suggested fix for the flake8-async lint rule ASYNC900. (#3197)

Bugfixes

  • Allow trio to be a types.ModuleType and still have deprecated attributes. (#2135)
  • Fixed socket module for some older systems which lack socket.AI_NUMERICSERV.
    Now trio works on legacy (pre-Lion) macOS. (#3133)
  • Update type hints for trio.run_process and trio.lowlevel.open_process. (#3183)
  • Don't mutate the global runner when MockClock is created. (#3205)
  • Fix incorrect return type hint for Nursery.start(). (#3224)

Improved documentation

  • Update wording in documentation to more accurately reflect Trio's maturity. (#3216)

v0.29.0

Choose a tag to compare

@A5rocks A5rocks released this 14 Feb 07:19

Full Changelog: v0.28.0...v0.29.0

Features

  • Add trio.lowlevel.in_trio_run and trio.lowlevel.in_trio_task and document the semantics (and differences) thereof. (#2757)
  • If trio.testing.RaisesGroup does not get the expected exceptions it now raises an AssertionError with a helpful message, instead of letting the raised exception/group fall through. The raised exception is available in the __context__ of the AssertionError and can be seen in the traceback. (#3145)

Bugfixes

  • Clear Trio's cache of worker threads upon os.fork. (#2764)

Miscellaneous internal changes

  • Stop using ctypes to mutate tracebacks for strict_exception_groups=False's exception collapsing. (#405)

  • Fixed spelling error in Windows error code enum for ERROR_INVALID_PARAMETER. (#3166)

  • Publicly re-export __version__ for type checking purposes. (#3186)

  • The typing of trio.abc.HostnameResolver.getaddrinfo has been corrected to match that of the stdlib socket.getaddrinfo, which was updated in mypy 1.15 (via a typeshed update) to include the possibility of tuple[int, bytes] for the sockaddr field of the result. This happens in situations where Python was compiled with --disable-ipv6.

    Additionally, the static typing of trio.to_thread.run_sync, trio.from_thread.run and trio.from_thread.run_sync has been improved and should reflect the underlying function being run. (#3201)

v0.28.0

Choose a tag to compare

@A5rocks A5rocks released this 25 Dec 17:04

Full Changelog: v0.27.0...v0.28.0

Bugfixes

  • :func:inspect.iscoroutinefunction and the like now give correct answers when
    called on KI-protected functions. (#2670)

  • Rework KeyboardInterrupt protection to track code objects, rather than frames,
    as protected or not. The new implementation no longer needs to access
    frame.f_locals dictionaries, so it won't artificially extend the lifetime of
    local variables. Since KeyboardInterrupt protection is now imposed statically
    (when a protected function is defined) rather than each time the function runs,
    its previously-noticeable performance overhead should now be near zero.
    The lack of a call-time wrapper has some other benefits as well:

    • :func:inspect.iscoroutinefunction and the like now give correct answers when
      called on KI-protected functions.

    • Calling a synchronous KI-protected function no longer pushes an additional stack
      frame, so tracebacks are clearer.

    • A synchronous KI-protected function invoked from C code (such as a weakref
      finalizer) is now guaranteed to start executing; previously there would be a brief
      window in which KeyboardInterrupt could be raised before the protection was
      established.

    One minor drawback of the new approach is that multiple instances of the same
    closure share a single KeyboardInterrupt protection state (because they share a
    single code object). That means that if you apply
    trio.lowlevel.enable_ki_protection to some of them
    and not others, you won't get the protection semantics you asked for. See the
    documentation of trio.lowlevel.enable_ki_protection
    for more details and a workaround. (#3108)

  • Rework foreign async generator finalization to track async generator
    ids rather than mutating ag_frame.f_locals. This fixes an issue
    with the previous implementation: locals' lifetimes will no longer be
    extended by materialization in the ag_frame.f_locals dictionary that
    the previous finalization dispatcher logic needed to access to do its work. (#3112)

  • Ensure that Pyright recognizes our underscore prefixed attributes for attrs classes. (#3114)

  • Fix trio.testing.RaisesGroup's typing. (#3141)

Improved documentation

  • Improve error message when run after gevent's monkey patching. (#3087)
  • Document that trio.sleep_forever is guaranteed to raise an exception now. (#3113)

Removals without deprecations

  • Remove workaround for OpenSSL 1.1.1 DTLS ClientHello bug. (#3097)
  • Drop support for Python 3.8. (#3104) (#3106)

Miscellaneous internal changes

  • Switch to using PEP570 for positional-only arguments for trio.socket.SocketType's methods. (#3094)
  • Improve type annotations in several places by removing Any usage. (#3121)
  • Get and enforce 100% coverage (#3159)

v0.27.0

Choose a tag to compare

@A5rocks A5rocks released this 16 Oct 23:34

Full Changelog: v0.26.2...v0.27.0

Breaking changes

  • trio.move_on_after and trio.fail_after previously set the deadline relative to initialization time, instead of more intuitively upon entering the context manager. This might change timeouts if a program relied on this behavior. If you want to restore previous behavior you should instead use trio.move_on_at(trio.current_time() + ...).
    flake8-async has a new rule to catch this, in case you're supporting older trio versions. See ASYNC122. (#2512)

Features

  • CancelScope.relative_deadline and CancelScope.is_relative added, as well as a relative_deadline parameter to __init__. This allows initializing scopes ahead of time, but where the specified relative deadline doesn't count down until the scope is entered. (#2512)
  • trio.Lock and trio.StrictFIFOLock will now raise trio.BrokenResourceError when trio.Lock.acquire would previously stall due to the owner of the lock exiting without releasing the lock. (#3035)
  • trio.move_on_at, trio.move_on_after, trio.fail_at and trio.fail_after now accept shield as a keyword argument. If specified, it provides an initial value for the ~trio.CancelScope.shield attribute of the trio.CancelScope object created by the context manager. (#3052)
  • Added trio.lowlevel.add_parking_lot_breaker and trio.lowlevel.remove_parking_lot_breaker to allow creating custom lock/semaphore implementations that will break their underlying parking lot if a task exits unexpectedly. trio.lowlevel.ParkingLot.break_lot is also added, to allow breaking a parking lot intentionally. (#3081)

Bugfixes

  • Allow sockets to bind any os.PathLike object. (#3041)
  • Update trio.lowlevel.open_process's documentation to allow bytes. (#3076)
  • Update trio.sleep_forever to be NoReturn. (#3095)

Improved documentation

  • Add docstrings for memory channels' statistics() and aclose methods. (#3101)

v0.26.2

Choose a tag to compare

@A5rocks A5rocks released this 08 Aug 00:49

Full Changelog: v0.26.1...v0.26.2

Bugfixes

  • Remove remaining hash usage and fix test configuration issue that prevented it from being caught. (#3053)

v0.26.1

Choose a tag to compare

@A5rocks A5rocks released this 05 Aug 01:09

Full Changelog: v0.26.0...v0.26.1

Bugfixes

  • Switched attrs usage off of hash, which is now deprecated. (#3053)

Miscellaneous internal changes

  • Use PyPI's Trusted Publishers to make releases. (#2980)

v0.26.0

Choose a tag to compare

@A5rocks A5rocks released this 05 Jul 04:32

Full Changelog: v0.25.1...v0.26.0

Features

  • Added an interactive interpreter python -m trio.

    This makes it easier to try things and experiment with trio in the a Python repl.
    Use the await keyword without needing to call trio.run()

$ python -m trio
Trio 0.26.0, Python 3.10.6
Use "await" directly instead of "trio.run()".
Type "help", "copyright", "credits" or "license" for more information.
>>> import trio
>>> await trio.sleep(1); print("hi")  # prints after one second
hi

See interactive debugging for further detail. (#2972)

  • trio.testing.RaisesGroup can now catch an unwrapped exception with unwrapped=True. This means that the behaviour of except* can be fully replicated in combination with flatten_subgroups=True (formerly strict=False). (#2989)

Bugfixes

  • Fixed a bug where trio.testing.RaisesGroup(..., strict=False) would check the number of exceptions in the raised ExceptionGroup before flattening subgroups, leading to incorrectly failed matches.
    It now properly supports end ($) regex markers in the match message, by no longer including " (x sub-exceptions)" in the string it matches against. (#2989)

Deprecations and removals

  • Deprecated strict parameter from trio.testing.RaisesGroup, previous functionality of strict=False is now in flatten_subgroups=True. (#2989)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.