CHANGELOG.rst (20034B)
1 ========= 2 Changelog 3 ========= 4 5 Versions follow `Semantic Versioning <https://semver.org/>`_ (``<major>.<minor>.<patch>``). 6 7 .. 8 You should *NOT* be adding new change log entries to this file, this 9 file is managed by towncrier. You *may* edit previous change logs to 10 fix problems like typo corrections or such. 11 To add a new change log entry, please see 12 https://pip.pypa.io/en/latest/development/contributing/#news-entries 13 we named the news folder changelog 14 15 .. only:: changelog_towncrier_draft 16 17 .. The 'changelog_towncrier_draft' tag is included by our 'tox -e docs', 18 but not on readthedocs. 19 20 .. include:: _changelog_towncrier_draft.rst 21 22 .. towncrier release notes start 23 24 pluggy 1.5.0 (2024-04-19) 25 ========================= 26 27 Features 28 -------- 29 30 - `#178 <https://github.com/pytest-dev/pluggy/issues/178>`_: Add support for deprecating specific hook parameters, or more generally, for issuing a warning whenever a hook implementation requests certain parameters. 31 32 See :ref:`warn_on_impl` for details. 33 34 35 36 Bug Fixes 37 --------- 38 39 - `#481 <https://github.com/pytest-dev/pluggy/issues/481>`_: ``PluginManager.get_plugins()`` no longer returns ``None`` for blocked plugins. 40 41 42 pluggy 1.4.0 (2024-01-24) 43 ========================= 44 45 Features 46 -------- 47 48 - `#463 <https://github.com/pytest-dev/pluggy/issues/463>`_: A warning :class:`~pluggy.PluggyTeardownRaisedWarning` is now issued when an old-style hookwrapper raises an exception during teardown. 49 See the warning documentation for more details. 50 51 - `#471 <https://github.com/pytest-dev/pluggy/issues/471>`_: Add :func:`PluginManager.unblock <pluggy.PluginManager.unblock>` method to unblock a plugin by plugin name. 52 53 Bug Fixes 54 --------- 55 56 - `#441 <https://github.com/pytest-dev/pluggy/issues/441>`_: Fix :func:`~pluggy.HookCaller.call_extra()` extra methods getting ordered before everything else in some circumstances. Regressed in pluggy 1.1.0. 57 58 - `#438 <https://github.com/pytest-dev/pluggy/issues/438>`_: Fix plugins registering other plugins in a hook when the other plugins implement the same hook itself. Regressed in pluggy 1.1.0. 59 60 61 pluggy 1.3.0 (2023-08-26) 62 ========================= 63 64 Deprecations and Removals 65 ------------------------- 66 67 - `#426 <https://github.com/pytest-dev/pluggy/issues/426>`_: Python 3.7 is no longer supported. 68 69 70 71 Features 72 -------- 73 74 - `#428 <https://github.com/pytest-dev/pluggy/issues/428>`_: Pluggy now exposes its typings to static type checkers. 75 76 As part of this, the following changes are made: 77 78 - Renamed ``_Result`` to ``Result``, and exported as :class:`pluggy.Result`. 79 - Renamed ``_HookRelay`` to ``HookRelay``, and exported as :class:`pluggy.HookRelay`. 80 - Renamed ``_HookCaller`` to ``HookCaller``, and exported as :class:`pluggy.HookCaller`. 81 - Exported ``HookImpl`` as :class:`pluggy.HookImpl`. 82 - Renamed ``_HookImplOpts`` to ``HookimplOpts``, and exported as :class:`pluggy.HookimplOpts`. 83 - Renamed ``_HookSpecOpts`` to ``HookspecOpts``, and exported as :class:`pluggy.HookspecOpts`. 84 - Some fields and classes are marked ``Final`` and ``@final``. 85 - The :ref:`api-reference` is updated to clearly delineate pluggy's public API. 86 87 Compatibility aliases are put in place for the renamed types. 88 We do not plan to remove the aliases, but we strongly recommend to only import from ``pluggy.*`` to ensure future compatibility. 89 90 Please note that pluggy is currently unable to provide strong typing for hook calls, e.g. ``pm.hook.my_hook(...)``, 91 nor to statically check that a hook implementation matches the hook specification's type. 92 93 94 pluggy 1.2.0 (2023-06-21) 95 ========================= 96 97 Features 98 -------- 99 100 - `#405 <https://github.com/pytest-dev/pluggy/issues/405>`_: The new-style hook wrappers, added in the yanked 1.1.0 release, now require an explicit ``wrapper=True`` designation in the ``@hookimpl()`` decorator. 101 102 103 pluggy 1.1.0 (YANKED) 104 ===================== 105 106 .. note:: 107 108 This release was yanked because unfortunately the implicit new-style hook wrappers broke some downstream projects. 109 See `#403 <https://github.com/pytest-dev/pluggy/issues/403>`__ for more information. 110 This was rectified in the 1.2.0 release. 111 112 Deprecations and Removals 113 ------------------------- 114 115 - `#364 <https://github.com/pytest-dev/pluggy/issues/364>`_: Python 3.6 is no longer supported. 116 117 118 119 Features 120 -------- 121 122 - `#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. 123 124 New-style wrappers are generator functions, similarly to ``hookwrapper``, but do away with the :class:`result <pluggy.Result>` object. 125 Instead, the return value is sent directly to the ``yield`` statement, or, if inner calls raised an exception, it is raised from the ``yield``. 126 The wrapper is expected to return a value or raise an exception, which will become the result of the hook call. 127 128 New-style wrappers are fully interoperable with old-style wrappers. 129 We encourage users to use the new style, however we do not intend to deprecate the old style any time soon. 130 131 See :ref:`hookwrappers` for the full documentation. 132 133 134 - `#364 <https://github.com/pytest-dev/pluggy/issues/364>`_: Python 3.11 and 3.12 are now officially supported. 135 136 137 - `#394 <https://github.com/pytest-dev/pluggy/issues/394>`_: Added the :meth:`~pluggy.Result.force_exception` method to ``_Result``. 138 139 ``force_exception`` allows (old-style) hookwrappers to force an exception or override/adjust an existing exception of a hook invocation, 140 in a properly behaving manner. Using ``force_exception`` is preferred over raising an exception from the hookwrapper, 141 because raising an exception causes other hookwrappers to be skipped. 142 143 144 pluggy 1.0.0 (2021-08-25) 145 ========================= 146 147 Deprecations and Removals 148 ------------------------- 149 150 - `#116 <https://github.com/pytest-dev/pluggy/issues/116>`_: Remove deprecated ``implprefix`` support. 151 Decorate hook implementations using an instance of HookimplMarker instead. 152 The deprecation was announced in release ``0.7.0``. 153 154 155 - `#120 <https://github.com/pytest-dev/pluggy/issues/120>`_: Remove the deprecated ``proc`` argument to ``call_historic``. 156 Use ``result_callback`` instead, which has the same behavior. 157 The deprecation was announced in release ``0.7.0``. 158 159 160 - `#265 <https://github.com/pytest-dev/pluggy/issues/265>`_: Remove the ``_Result.result`` property. Use ``_Result.get_result()`` instead. 161 Note that unlike ``result``, ``get_result()`` raises the exception if the hook raised. 162 The deprecation was announced in release ``0.6.0``. 163 164 165 - `#267 <https://github.com/pytest-dev/pluggy/issues/267>`_: Remove official support for Python 3.4. 166 167 168 - `#272 <https://github.com/pytest-dev/pluggy/issues/272>`_: Dropped support for Python 2. 169 Continue to use pluggy 0.13.x for Python 2 support. 170 171 172 - `#308 <https://github.com/pytest-dev/pluggy/issues/308>`_: Remove official support for Python 3.5. 173 174 175 - `#313 <https://github.com/pytest-dev/pluggy/issues/313>`_: The internal ``pluggy.callers``, ``pluggy.manager`` and ``pluggy.hooks`` are now explicitly marked private by a ``_`` prefix (e.g. ``pluggy._callers``). 176 Only API exported by the top-level ``pluggy`` module is considered public. 177 178 179 - `#59 <https://github.com/pytest-dev/pluggy/issues/59>`_: Remove legacy ``__multicall__`` recursive hook calling system. 180 The deprecation was announced in release ``0.5.0``. 181 182 183 184 Features 185 -------- 186 187 - `#282 <https://github.com/pytest-dev/pluggy/issues/282>`_: When registering a hookimpl which is declared as ``hookwrapper=True`` but whose 188 function is not a generator function, a :class:`~pluggy.PluginValidationError` exception is 189 now raised. 190 191 Previously this problem would cause an error only later, when calling the hook. 192 193 In the unlikely case that you have a hookwrapper that *returns* a generator 194 instead of yielding directly, for example: 195 196 .. code-block:: python 197 198 def my_hook_implementation(arg): 199 print("before") 200 yield 201 print("after") 202 203 204 @hookimpl(hookwrapper=True) 205 def my_hook(arg): 206 return my_hook_implementation(arg) 207 208 change it to use ``yield from`` instead: 209 210 .. code-block:: python 211 212 @hookimpl(hookwrapper=True) 213 def my_hook(arg): 214 yield from my_hook_implementation(arg) 215 216 217 - `#309 <https://github.com/pytest-dev/pluggy/issues/309>`_: Add official support for Python 3.9. 218 219 - `#251 <https://github.com/pytest-dev/pluggy/issues/251>`_: Add ``specname`` option to ``@hookimpl``. If ``specname`` is provided, it will be used 220 instead of the function name when matching this hook implementation to a hook specification during registration (allowing a plugin to register 221 a hook implementation that was not named the same thing as the corresponding ``@hookspec``). 222 223 224 pluggy 0.13.1 (2019-11-21) 225 ========================== 226 227 Trivial/Internal Changes 228 ------------------------ 229 230 - `#236 <https://github.com/pytest-dev/pluggy/pull/236>`_: Improved documentation, especially with regard to references. 231 232 233 pluggy 0.13.0 (2019-09-10) 234 ========================== 235 236 Trivial/Internal Changes 237 ------------------------ 238 239 - `#222 <https://github.com/pytest-dev/pluggy/issues/222>`_: Replace ``importlib_metadata`` backport with ``importlib.metadata`` from the 240 standard library on Python 3.8+. 241 242 243 pluggy 0.12.0 (2019-05-27) 244 ========================== 245 246 Features 247 -------- 248 249 - `#215 <https://github.com/pytest-dev/pluggy/issues/215>`_: Switch from ``pkg_resources`` to ``importlib-metadata`` for entrypoint detection for improved performance and import time. This time with ``.egg`` support. 250 251 252 pluggy 0.11.0 (2019-05-07) 253 ========================== 254 255 Bug Fixes 256 --------- 257 258 - `#205 <https://github.com/pytest-dev/pluggy/issues/205>`_: Revert changes made in 0.10.0 release breaking ``.egg`` installs. 259 260 261 pluggy 0.10.0 (2019-05-07) 262 ========================== 263 264 Features 265 -------- 266 267 - `#199 <https://github.com/pytest-dev/pluggy/issues/199>`_: Switch from ``pkg_resources`` to ``importlib-metadata`` for entrypoint detection for improved performance and import time. 268 269 270 pluggy 0.9.0 (2019-02-21) 271 ========================= 272 273 Features 274 -------- 275 276 - `#189 <https://github.com/pytest-dev/pluggy/issues/189>`_: ``PluginManager.load_setuptools_entrypoints`` now accepts a ``name`` parameter that when given will 277 load only entry points with that name. 278 279 ``PluginManager.load_setuptools_entrypoints`` also now returns the number of plugins loaded by the 280 call, as opposed to the number of all plugins loaded by all calls to this method. 281 282 283 284 Bug Fixes 285 --------- 286 287 - `#187 <https://github.com/pytest-dev/pluggy/issues/187>`_: Fix internal ``varnames`` function for PyPy3. 288 289 290 pluggy 0.8.1 (2018-11-09) 291 ========================= 292 293 Trivial/Internal Changes 294 ------------------------ 295 296 - `#166 <https://github.com/pytest-dev/pluggy/issues/166>`_: Add ``stacklevel=2`` to implprefix warning so that the reported location of warning is the caller of PluginManager. 297 298 299 pluggy 0.8.0 (2018-10-15) 300 ========================= 301 302 Features 303 -------- 304 305 - `#177 <https://github.com/pytest-dev/pluggy/issues/177>`_: Add ``get_hookimpls()`` method to hook callers. 306 307 308 309 Trivial/Internal Changes 310 ------------------------ 311 312 - `#165 <https://github.com/pytest-dev/pluggy/issues/165>`_: Add changelog in long package description and documentation. 313 314 315 - `#172 <https://github.com/pytest-dev/pluggy/issues/172>`_: Add a test exemplifying the opt-in nature of spec defined args. 316 317 318 - `#57 <https://github.com/pytest-dev/pluggy/issues/57>`_: Encapsulate hook specifications in a type for easier introspection. 319 320 321 pluggy 0.7.1 (2018-07-28) 322 ========================= 323 324 Deprecations and Removals 325 ------------------------- 326 327 - `#116 <https://github.com/pytest-dev/pluggy/issues/116>`_: Deprecate the ``implprefix`` kwarg to ``PluginManager`` and instead 328 expect users to start using explicit ``HookimplMarker`` everywhere. 329 330 331 332 Features 333 -------- 334 335 - `#122 <https://github.com/pytest-dev/pluggy/issues/122>`_: Add ``.plugin`` member to ``PluginValidationError`` to access failing plugin during post-mortem. 336 337 338 - `#138 <https://github.com/pytest-dev/pluggy/issues/138>`_: Add per implementation warnings support for hookspecs allowing for both 339 deprecation and future warnings of legacy and (future) experimental hooks 340 respectively. 341 342 343 344 Bug Fixes 345 --------- 346 347 - `#110 <https://github.com/pytest-dev/pluggy/issues/110>`_: Fix a bug where ``_HookCaller.call_historic()`` would call the ``proc`` 348 arg even when the default is ``None`` resulting in a ``TypeError``. 349 350 - `#160 <https://github.com/pytest-dev/pluggy/issues/160>`_: Fix problem when handling ``VersionConflict`` errors when loading setuptools plugins. 351 352 353 354 Improved Documentation 355 ---------------------- 356 357 - `#123 <https://github.com/pytest-dev/pluggy/issues/123>`_: Document how exceptions are handled and how the hook call loop 358 terminates immediately on the first error which is then delivered 359 to any surrounding wrappers. 360 361 362 - `#136 <https://github.com/pytest-dev/pluggy/issues/136>`_: Docs rework including a much better introduction and comprehensive example 363 set for new users. A big thanks goes out to @obestwalter for the great work! 364 365 366 367 Trivial/Internal Changes 368 ------------------------ 369 370 - `#117 <https://github.com/pytest-dev/pluggy/issues/117>`_: Break up the main monolithic package modules into separate modules by concern 371 372 373 - `#131 <https://github.com/pytest-dev/pluggy/issues/131>`_: Automate ``setuptools`` wheels building and PyPi upload using TravisCI. 374 375 376 - `#153 <https://github.com/pytest-dev/pluggy/issues/153>`_: Reorganize tests more appropriately by modules relating to each 377 internal component/feature. This is in an effort to avoid (future) 378 duplication and better separation of concerns in the test set. 379 380 381 - `#156 <https://github.com/pytest-dev/pluggy/issues/156>`_: Add ``HookImpl.__repr__()`` for better debugging. 382 383 384 - `#66 <https://github.com/pytest-dev/pluggy/issues/66>`_: Start using ``towncrier`` and a custom ``tox`` environment to prepare releases! 385 386 387 pluggy 0.7.0 (Unreleased) 388 ========================= 389 390 * `#160 <https://github.com/pytest-dev/pluggy/issues/160>`_: We discovered a deployment issue so this version was never released to PyPI, only the tag exists. 391 392 pluggy 0.6.0 (2017-11-24) 393 ========================= 394 395 - Add CI testing for the features, release, and master 396 branches of ``pytest`` (PR `#79`_). 397 - Document public API for ``_Result`` objects passed to wrappers 398 (PR `#85`_). 399 - Document and test hook LIFO ordering (PR `#85`_). 400 - Turn warnings into errors in test suite (PR `#89`_). 401 - Deprecate ``_Result.result`` (PR `#88`_). 402 - Convert ``_Multicall`` to a simple function distinguishing it from 403 the legacy version (PR `#90`_). 404 - Resolve E741 errors (PR `#96`_). 405 - Test and bug fix for unmarked hook collection (PRs `#97`_ and 406 `#102`_). 407 - Drop support for EOL Python 2.6 and 3.3 (PR `#103`_). 408 - Fix ``inspect`` based arg introspection on py3.6 (PR `#94`_). 409 410 .. _#79: https://github.com/pytest-dev/pluggy/pull/79 411 .. _#85: https://github.com/pytest-dev/pluggy/pull/85 412 .. _#88: https://github.com/pytest-dev/pluggy/pull/88 413 .. _#89: https://github.com/pytest-dev/pluggy/pull/89 414 .. _#90: https://github.com/pytest-dev/pluggy/pull/90 415 .. _#94: https://github.com/pytest-dev/pluggy/pull/94 416 .. _#96: https://github.com/pytest-dev/pluggy/pull/96 417 .. _#97: https://github.com/pytest-dev/pluggy/pull/97 418 .. _#102: https://github.com/pytest-dev/pluggy/pull/102 419 .. _#103: https://github.com/pytest-dev/pluggy/pull/103 420 421 422 pluggy 0.5.2 (2017-09-06) 423 ========================= 424 425 - fix bug where ``firstresult`` wrappers were being sent an incorrectly configured 426 ``_Result`` (a list was set instead of a single value). Add tests to check for 427 this as well as ``_Result.force_result()`` behaviour. Thanks to `@tgoodlet`_ 428 for the PR `#72`_. 429 430 - fix incorrect ``getattr`` of ``DeprecationWarning`` from the ``warnings`` 431 module. Thanks to `@nicoddemus`_ for the PR `#77`_. 432 433 - hide ``pytest`` tracebacks in certain core routines. Thanks to 434 `@nicoddemus`_ for the PR `#80`_. 435 436 .. _#72: https://github.com/pytest-dev/pluggy/pull/72 437 .. _#77: https://github.com/pytest-dev/pluggy/pull/77 438 .. _#80: https://github.com/pytest-dev/pluggy/pull/80 439 440 441 pluggy 0.5.1 (2017-08-29) 442 ========================= 443 444 - fix a bug and add tests for case where ``firstresult`` hooks return 445 ``None`` results. Thanks to `@RonnyPfannschmidt`_ and `@tgoodlet`_ 446 for the issue (`#68`_) and PR (`#69`_) respectively. 447 448 .. _#69: https://github.com/pytest-dev/pluggy/pull/69 449 .. _#68: https://github.com/pytest-dev/pluggy/issues/68 450 451 452 pluggy 0.5.0 (2017-08-28) 453 ========================= 454 455 - fix bug where callbacks for historic hooks would not be called for 456 already registered plugins. Thanks `@vodik`_ for the PR 457 and `@hpk42`_ for further fixes. 458 459 - fix `#17`_ by considering only actual functions for hooks 460 this removes the ability to register arbitrary callable objects 461 which at first glance is a reasonable simplification, 462 thanks `@RonnyPfannschmidt`_ for report and pr. 463 464 - fix `#19`_: allow registering hookspecs from instances. The PR from 465 `@tgoodlet`_ also modernized the varnames implementation. 466 467 - resolve `#32`_: split up the test set into multiple modules. 468 Thanks to `@RonnyPfannschmidt`_ for the PR and `@tgoodlet`_ for 469 the initial request. 470 471 - resolve `#14`_: add full sphinx docs. Thanks to `@tgoodlet`_ for 472 PR `#39`_. 473 474 - add hook call mismatch warnings. Thanks to `@tgoodlet`_ for the 475 PR `#42`_. 476 477 - resolve `#44`_: move to new-style classes. Thanks to `@MichalTHEDUDE`_ 478 for PR `#46`_. 479 480 - add baseline benchmarking/speed tests using ``pytest-benchmark`` 481 in PR `#54`_. Thanks to `@tgoodlet`_. 482 483 - update the README to showcase the API. Thanks to `@tgoodlet`_ for the 484 issue and PR `#55`_. 485 486 - deprecate ``__multicall__`` and add a faster call loop implementation. 487 Thanks to `@tgoodlet`_ for PR `#58`_. 488 489 - raise a comprehensible error when a ``hookimpl`` is called with positional 490 args. Thanks to `@RonnyPfannschmidt`_ for the issue and `@tgoodlet`_ for 491 PR `#60`_. 492 493 - fix the ``firstresult`` test making it more complete 494 and remove a duplicate of that test. Thanks to `@tgoodlet`_ 495 for PR `#62`_. 496 497 .. _#62: https://github.com/pytest-dev/pluggy/pull/62 498 .. _#60: https://github.com/pytest-dev/pluggy/pull/60 499 .. _#58: https://github.com/pytest-dev/pluggy/pull/58 500 .. _#55: https://github.com/pytest-dev/pluggy/pull/55 501 .. _#54: https://github.com/pytest-dev/pluggy/pull/54 502 .. _#46: https://github.com/pytest-dev/pluggy/pull/46 503 .. _#44: https://github.com/pytest-dev/pluggy/issues/44 504 .. _#42: https://github.com/pytest-dev/pluggy/pull/42 505 .. _#39: https://github.com/pytest-dev/pluggy/pull/39 506 .. _#32: https://github.com/pytest-dev/pluggy/pull/32 507 .. _#19: https://github.com/pytest-dev/pluggy/issues/19 508 .. _#17: https://github.com/pytest-dev/pluggy/issues/17 509 .. _#14: https://github.com/pytest-dev/pluggy/issues/14 510 511 512 pluggy 0.4.0 (2016-09-25) 513 ========================= 514 515 - add ``has_plugin(name)`` method to pluginmanager. thanks `@nicoddemus`_. 516 517 - fix `#11`_: make plugin parsing more resilient against exceptions 518 from ``__getattr__`` functions. Thanks `@nicoddemus`_. 519 520 - fix issue `#4`_: specific ``HookCallError`` exception for when a hook call 521 provides not enough arguments. 522 523 - better error message when loading setuptools entrypoints fails 524 due to a ``VersionConflict``. Thanks `@blueyed`_. 525 526 .. _#11: https://github.com/pytest-dev/pluggy/issues/11 527 .. _#4: https://github.com/pytest-dev/pluggy/issues/4 528 529 530 pluggy 0.3.1 (2015-09-17) 531 ========================= 532 533 - avoid using deprecated-in-python3.5 getargspec method. Thanks 534 `@mdboom`_. 535 536 537 pluggy 0.3.0 (2015-05-07) 538 ========================= 539 540 initial release 541 542 .. contributors 543 .. _@hpk42: https://github.com/hpk42 544 .. _@tgoodlet: https://github.com/goodboy 545 .. _@MichalTHEDUDE: https://github.com/MichalTHEDUDE 546 .. _@vodik: https://github.com/vodik 547 .. _@RonnyPfannschmidt: https://github.com/RonnyPfannschmidt 548 .. _@blueyed: https://github.com/blueyed 549 .. _@nicoddemus: https://github.com/nicoddemus 550 .. _@mdboom: https://github.com/mdboom