Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 65 additions & 0 deletions docs/source/history.rst
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,71 @@ Release history

.. towncrier release notes start

Trio 0.28.0 (2024-12-25)
------------------------

Bugfixes
~~~~~~~~

- :func:`inspect.iscoroutinefunction` and the like now give correct answers when
called on KI-protected functions. (`#2670 <https://github.com/python-trio/trio/issues/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
`@enable_ki_protection <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 `@enable_ki_protection <trio.lowlevel.enable_ki_protection>`
for more details and a workaround. (`#3108 <https://github.com/python-trio/trio/issues/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 <https://github.com/python-trio/trio/issues/3112>`__)
- Ensure that Pyright recognizes our underscore prefixed attributes for attrs classes. (`#3114 <https://github.com/python-trio/trio/issues/3114>`__)
- Fix `trio.testing.RaisesGroup`'s typing. (`#3141 <https://github.com/python-trio/trio/issues/3141>`__)


Improved documentation
~~~~~~~~~~~~~~~~~~~~~~

- Improve error message when run after gevent's monkey patching. (`#3087 <https://github.com/python-trio/trio/issues/3087>`__)
- Document that :func:`trio.sleep_forever` is guaranteed to raise an exception now. (`#3113 <https://github.com/python-trio/trio/issues/3113>`__)


Removals without deprecations
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

- Remove workaround for OpenSSL 1.1.1 DTLS ClientHello bug. (`#3097 <https://github.com/python-trio/trio/issues/3097>`__)
- Drop support for Python 3.8. (`#3104 <https://github.com/python-trio/trio/issues/3104>`__) (`#3106 <https://github.com/python-trio/trio/issues/3106>`__)


Miscellaneous internal changes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

- Switch to using PEP570 for positional-only arguments for `~trio.socket.SocketType`'s methods. (`#3094 <https://github.com/python-trio/trio/issues/3094>`__)
- Improve type annotations in several places by removing `Any` usage. (`#3121 <https://github.com/python-trio/trio/issues/3121>`__)
- Get and enforce 100% coverage (`#3159 <https://github.com/python-trio/trio/issues/3159>`__)


Trio 0.27.0 (2024-10-17)
------------------------

Expand Down
2 changes: 0 additions & 2 deletions newsfragments/2670.bugfix.rst

This file was deleted.

1 change: 0 additions & 1 deletion newsfragments/3087.doc.rst

This file was deleted.

1 change: 0 additions & 1 deletion newsfragments/3094.misc.rst

This file was deleted.

1 change: 0 additions & 1 deletion newsfragments/3097.removal.rst

This file was deleted.

1 change: 0 additions & 1 deletion newsfragments/3106.removal.rst

This file was deleted.

26 changes: 0 additions & 26 deletions newsfragments/3108.bugfix.rst

This file was deleted.

5 changes: 0 additions & 5 deletions newsfragments/3112.bugfix.rst

This file was deleted.

1 change: 0 additions & 1 deletion newsfragments/3113.doc.rst

This file was deleted.

1 change: 0 additions & 1 deletion newsfragments/3114.bugfix.rst

This file was deleted.

1 change: 0 additions & 1 deletion newsfragments/3121.misc.rst

This file was deleted.

1 change: 0 additions & 1 deletion newsfragments/3141.bugfix.rst

This file was deleted.

1 change: 0 additions & 1 deletion newsfragments/3159.misc.rst

This file was deleted.

2 changes: 1 addition & 1 deletion src/trio/_version.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
# This file is imported from __init__.py and parsed by setuptools

__version__ = "0.27.0+dev"
__version__ = "0.28.0+dev"