Plugins are a way to extend the functionality of the render engine site.
Plugins are registered by adding them to the
plugins list in the site class.
from render_engine import Site, Collection, Page class MySite(Site): plugins = [ MyPlugin, ] my_site = MySite()
Plugins are passed to collections and pages when the
site.page methods are called.
@my_site.page # plugins are ran on the page class MyPage(Page): pass @site.collection # plugins are ran on each page in the collection class MyCollection(Collection): pass my_site.route_list['mypage']._pm.list_name_plugin() >>> ['MyPlugin']
Implementing a plugin
Plugins are built with pluggy. See the pluggy documentation for more information.
Plugins use the entrypoints defined in
render_engine.hookspecs. These allow plugins to be called at different points in the render engine lifecycle.
For example the
CleanOutput plugin uses the
pre_build_site entrypoint to remove the output directory before rendering.
Pages and collections can ignore plugins by passing a list of plugin names to the
class MySite(Site): plugins = [ MyPlugin1, MyPlugin2, ] class MyPage(Page): ignore_plugins = [MyPlugin1] my_site.route_list['mypage']._pm.list_name_plugin() >>> ['MyPlugin2']