From 46282315446cbf58977fe5f487c0cdbe36e9c29a Mon Sep 17 00:00:00 2001 From: Ankit Chiplunkar Date: Fri, 28 Sep 2018 23:29:27 +0200 Subject: [PATCH] Enable auto-discovery of plugins Fixes #1230 --- trinity/main.py | 4 ++-- trinity/plugins/registry.py | 10 +++++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/trinity/main.py b/trinity/main.py index 5e77e0a7c3..fae9530ca2 100644 --- a/trinity/main.py +++ b/trinity/main.py @@ -51,7 +51,7 @@ SharedProcessScope, ) from trinity.plugins.registry import ( - ENABLED_PLUGINS + ALL_PLUGINS, ) from trinity.utils.ipc import ( wait_for_ipc, @@ -377,6 +377,6 @@ async def handle_networking_exit(service: BaseService, def setup_plugins(scope: BaseManagerProcessScope) -> PluginManager: plugin_manager = PluginManager(scope) # TODO: Implement auto-discovery of plugins based on some convention/configuration scheme - plugin_manager.register(ENABLED_PLUGINS) + plugin_manager.register(ALL_PLUGINS) return plugin_manager diff --git a/trinity/plugins/registry.py b/trinity/plugins/registry.py index 966409b40e..2139f3906e 100644 --- a/trinity/plugins/registry.py +++ b/trinity/plugins/registry.py @@ -33,7 +33,7 @@ def is_ipython_available() -> bool: # we'll be able to load plugins from some path and control via Trinity # config file which plugin is enabled or not -ENABLED_PLUGINS = [ +BUILTIN_PLUGINS = [ AttachPlugin() if is_ipython_available() else AttachPlugin(use_ipython=False), EthstatsPlugin(), FixUncleanShutdownPlugin(), @@ -41,3 +41,11 @@ def is_ipython_available() -> bool: LightPeerChainBridgePlugin(), TxPlugin(), ] + +# Plugins need to define entrypoints at 'trinity.plugins' to automatically get loaded +# https://packaging.python.org/guides/creating-and-discovering-plugins/#using-package-metadata +DISCOVERED_PLUGINS = [ + entry_point.load()() for entry_point in pkg_resources.iter_entry_points('trinity.plugins') +] + +ALL_PLUGINS = BUILTIN_PLUGINS + DISCOVERED_PLUGINS