plugin and hook calling mechanisms for python
pluggy - A minimalist production ready plugin system
Please read the docs to learn more!
A definitive example
import pluggy hookspec = pluggy.HookspecMarker("myproject") hookimpl = pluggy.HookimplMarker("myproject") class MySpec(object): """A hook specification namespace. """ @hookspec def myhook(self, arg1, arg2): """My special little hook that you can customize. """ class Plugin_1(object): """A hook implementation namespace. """ @hookimpl def myhook(self, arg1, arg2): print("inside Plugin_1.myhook()") return arg1 + arg2 class Plugin_2(object): """A 2nd hook implementation namespace. """ @hookimpl def myhook(self, arg1, arg2): print("inside Plugin_2.myhook()") return arg1 - arg2 # create a manager and add the spec pm = pluggy.PluginManager("myproject") pm.add_hookspecs(MySpec) # register plugins pm.register(Plugin_1()) pm.register(Plugin_2()) # call our ``myhook`` hook results = pm.hook.myhook(arg1=1, arg2=2) print(results)
Running this directly gets us:
$ python docs/examples/toy-example.py inside Plugin_2.myhook() inside Plugin_1.myhook() [-1, 3]
pluggy 0.13.1 (2019-11-21)
#236: Improved documentation, especially with regard to references.
pluggy 0.13.0 (2019-09-10)
#222: Replace importlib_metadata backport with importlib.metadata from the standard library on Python 3.8+.
pluggy 0.12.0 (2019-05-27)
#215: Switch from pkg_resources to importlib-metadata for entrypoint detection for improved performance and import time. This time with .egg support.
pluggy 0.11.0 (2019-05-07)
#205: Revert changes made in 0.10.0 release breaking .egg installs.
pluggy 0.10.0 (2019-05-07)
#199: Switch from pkg_resources to importlib-metadata for entrypoint detection for improved performance and import time.
pluggy 0.9.0 (2019-02-21)
#189: PluginManager.load_setuptools_entrypoints now accepts a name parameter that when given will load only entry points with that name.
PluginManager.load_setuptools_entrypoints also now returns the number of plugins loaded by the call, as opposed to the number of all plugins loaded by all calls to this method.
#187: Fix internal varnames function for PyPy3.
pluggy 0.8.1 (2018-11-09)
#166: Add stacklevel=2 to implprefix warning so that the reported location of warning is the caller of PluginManager.
pluggy 0.8.0 (2018-10-15)
#177: Add get_hookimpls() method to hook callers.
pluggy 0.7.1 (2018-07-28)
Deprecations and Removals
#116: Deprecate the implprefix kwarg to PluginManager and instead expect users to start using explicit HookimplMarker everywhere.
#123: Document how exceptions are handled and how the hook call loop terminates immediately on the first error which is then delivered to any surrounding wrappers.
#136: Docs rework including a much better introduction and comprehensive example set for new users. A big thanks goes out to @obestwalter for the great work!
#117: Break up the main monolithic package modules into separate modules by concern
#131: Automate setuptools wheels building and PyPi upload using TravisCI.
#153: Reorganize tests more appropriately by modules relating to each internal component/feature. This is in an effort to avoid (future) duplication and better separation of concerns in the test set.
#156: Add HookImpl.__repr__() for better debugging.
#66: Start using towncrier and a custom tox environment to prepare releases!
pluggy 0.7.0 (Unreleased)
#160: We discovered a deployment issue so this version was never released to PyPI, only the tag exists.
pluggy 0.6.0 (2017-11-24)
Add CI testing for the features, release, and master branches of pytest (PR #79).
Document public API for _Result objects passed to wrappers (PR #85).
Document and test hook LIFO ordering (PR #85).
Turn warnings into errors in test suite (PR #89).
Deprecate _Result.result (PR #88).
Convert _Multicall to a simple function distinguishing it from the legacy version (PR #90).
Resolve E741 errors (PR #96).
Drop support for EOL Python 2.6 and 3.3 (PR #103).
Fix inspect based arg introspection on py3.6 (PR #94).
pluggy 0.5.2 (2017-09-06)
fix bug where firstresult wrappers were being sent an incorrectly configured _Result (a list was set instead of a single value). Add tests to check for this as well as _Result.force_result() behaviour. Thanks to @tgoodlet for the PR #72.
pluggy 0.5.1 (2017-08-29)
pluggy 0.5.0 (2017-08-28)
fix #17 by considering only actual functions for hooks this removes the ability to register arbitrary callable objects which at first glance is a reasonable simplification, thanks @RonnyPfannschmidt for report and pr.
pluggy 0.4.0 (2016-09-25)
add has_plugin(name) method to pluginmanager. thanks @nicoddemus.
fix issue #4: specific HookCallError exception for when a hook call provides not enough arguments.
better error message when loading setuptools entrypoints fails due to a VersionConflict. Thanks @blueyed.
pluggy 0.3.1 (2015-09-17)
avoid using deprecated-in-python3.5 getargspec method. Thanks @mdboom.
pluggy 0.3.0 (2015-05-07)
Release history Release notifications | RSS feed
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Hashes for pluggy-1.0.0.dev0-py2.py3-none-any.whl