=====================
.. note::
This release was yanked because unfortunately the implicit new-style hook wrappers broke some downstream projects.
See `403 <https://github.com/pytest-dev/pluggy/issues/403>`__ for more information.
This was rectified in the 1.2.0 release.
Deprecations and Removals
-------------------------
- `364 <https://github.com/pytest-dev/pluggy/issues/364>`_: Python 3.6 is no longer supported.
Features
--------
- `260 <https://github.com/pytest-dev/pluggy/issues/260>`_: Added "new-style" hook wrappers, a simpler but equally powerful alternative to the existing ``hookwrapper=True`` wrappers.
New-style wrappers are generator functions, similarly to ``hookwrapper``, but do away with the :class:`result <pluggy.Result>` object.
Instead, the return value is sent directly to the ``yield`` statement, or, if inner calls raised an exception, it is raised from the ``yield``.
The wrapper is expected to return a value or raise an exception, which will become the result of the hook call.
New-style wrappers are fully interoperable with old-style wrappers.
We encourage users to use the new style, however we do not intend to deprecate the old style any time soon.
See :ref:`hookwrappers` for the full documentation.
- `364 <https://github.com/pytest-dev/pluggy/issues/364>`_: Python 3.11 and 3.12 are now officially supported.
- `394 <https://github.com/pytest-dev/pluggy/issues/394>`_: Added the :meth:`~pluggy.Result.force_exception` method to ``_Result``.
``force_exception`` allows (old-style) hookwrappers to force an exception or override/adjust an existing exception of a hook invocation,
in a properly behaving manner. Using ``force_exception`` is preferred over raising an exception from the hookwrapper,
because raising an exception causes other hookwrappers to be skipped.