- Raise PluginValidationError when registering a hookimpl declared as hookwrapper=True whose function is not a generator function
- Add official support for Python 3.9
- Add specname option to @hookimpl to match hook implementations to specifications using a different name
- Remove deprecated implprefix support; use HookimplMarker instead
- Remove the deprecated proc argument to call_historic; use result_callback instead
- Remove the _Result.result property; use _Result.get_result() instead
- Remove official support for Python 3.4
- Drop support for Python 2
- Remove official support for Python 3.5
- Mark internal pluggy.callers, pluggy.manager, and pluggy.hooks as private with _ prefix
- Remove legacy __multicall__ recursive hook calling system
Deprecations and Removals
-
#116 <https://github.com/pytest-dev/pluggy/issues/116>_: Remove deprecatedimplprefixsupport. Decorate hook implementations using an instance of HookimplMarker instead. The deprecation was announced in release0.7.0. -
#120 <https://github.com/pytest-dev/pluggy/issues/120>_: Remove the deprecatedprocargument tocall_historic. Useresult_callbackinstead, which has the same behavior. The deprecation was announced in release0.7.0. -
#265 <https://github.com/pytest-dev/pluggy/issues/265>_: Remove the_Result.resultproperty. Use_Result.get_result()instead. Note that unlikeresult,get_result()raises the exception if the hook raised. The deprecation was announced in release0.6.0. -
#267 <https://github.com/pytest-dev/pluggy/issues/267>_: Remove official support for Python 3.4. -
#272 <https://github.com/pytest-dev/pluggy/issues/272>_: Dropped support for Python 2. Continue to use pluggy 0.13.x for Python 2 support. -
#308 <https://github.com/pytest-dev/pluggy/issues/308>_: Remove official support for Python 3.5. -
#313 <https://github.com/pytest-dev/pluggy/issues/313>_: The internalpluggy.callers,pluggy.managerandpluggy.hooksare now explicitly marked private by a_prefix (e.g.pluggy._callers). Only API exported by the top-levelpluggymodule is considered public. -
#59 <https://github.com/pytest-dev/pluggy/issues/59>_: Remove legacy__multicall__recursive hook calling system. The deprecation was announced in release0.5.0.
Features
-
#282 <https://github.com/pytest-dev/pluggy/issues/282>_: When registering a hookimpl which is declared ashookwrapper=Truebut whose function is not a generator function, a :class:~pluggy.PluginValidationErrorexception is now raised.Previously this problem would cause an error only later, when calling the hook.
In the unlikely case that you have a hookwrapper that returns a generator instead of yielding directly, for example:
.. code-block:: python
def my_hook_implementation(arg): print("before") yield print("after") @hookimpl(hookwrapper=True) def my_hook(arg): return my_hook_implementation(arg)change it to use
yield frominstead:.. code-block:: python
@hookimpl(hookwrapper=True) def my_hook(arg): yield from my_hook_implementation(arg) -
#309 <https://github.com/pytest-dev/pluggy/issues/309>_: Add official support for Python 3.9. -
#251 <https://github.com/pytest-dev/pluggy/issues/251>_: Addspecnameoption to@hookimpl. Ifspecnameis provided, it will be used instead of the function name when matching this hook implementation to a hook specification during registration (allowing a plugin to register a hook implementation that was not named the same thing as the corresponding@hookspec).