From 44238cb66d14a6fb2f4d30f1cef9fdf0bb5f2e2d Mon Sep 17 00:00:00 2001 From: Ned Batchelder Date: Thu, 21 Aug 2014 10:35:15 -0400 Subject: More-serious plugin support --- coverage/plugin.py | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) (limited to 'coverage/plugin.py') diff --git a/coverage/plugin.py b/coverage/plugin.py index 0b557106..8e26ae6b 100644 --- a/coverage/plugin.py +++ b/coverage/plugin.py @@ -1,20 +1,30 @@ """Plugin management for coverage.py""" -def load_plugins(modules, name): - """Load plugins from `modules`, finding them by `name`. +import sys - Yields the loaded plugins. + +class CoveragePlugin(object): + """Base class for coverage.py plugins.""" + def __init__(self, options): + self.options = options + + +def load_plugins(modules, config): + """Load plugins from `modules`. + + Returns a list of loaded and configured plugins. """ + plugins = [] for module in modules: - try: - __import__(module) - mod = sys.modules[module] - except ImportError: - blah() - continue - - entry = getattr(mod, name, None) - if entry: - yield entry + __import__(module) + mod = sys.modules[module] + + plugin_class = getattr(mod, "Plugin", None) + if plugin_class: + options = config.get_plugin_options(module) + plugin = plugin_class(options) + plugins.append(plugin) + + return plugins -- cgit v1.2.1