summaryrefslogtreecommitdiff
path: root/coverage/plugin_support.py
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2015-06-13 08:22:43 -0400
committerNed Batchelder <ned@nedbatchelder.com>2015-06-13 08:22:43 -0400
commit77b1655fd879553e2e889da37ba6a26fdf8ac833 (patch)
tree74c70aad925334f9bbc0e0ce90d6eba4e3a6473d /coverage/plugin_support.py
parent5416b815eb4ce3d525868b17d5b3fa1e92fcad6c (diff)
downloadpython-coveragepy-77b1655fd879553e2e889da37ba6a26fdf8ac833.tar.gz
Also include plugin_support.py!
Diffstat (limited to 'coverage/plugin_support.py')
-rw-r--r--coverage/plugin_support.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/coverage/plugin_support.py b/coverage/plugin_support.py
new file mode 100644
index 0000000..9ab7954
--- /dev/null
+++ b/coverage/plugin_support.py
@@ -0,0 +1,51 @@
+"""Support for plugins."""
+
+import sys
+
+from coverage.misc import CoverageException
+
+
+class Plugins(object):
+ """The currently loaded collection of coverage.py plugins."""
+
+ def __init__(self):
+ self.order = []
+ self.names = {}
+
+ @classmethod
+ def load_plugins(cls, modules, config):
+ """Load plugins from `modules`.
+
+ Returns a list of loaded and configured plugins.
+
+ """
+ plugins = cls()
+
+ for module in modules:
+ __import__(module)
+ mod = sys.modules[module]
+
+ plugin_class = getattr(mod, "Plugin", None)
+ if not plugin_class:
+ raise CoverageException("Plugin module %r didn't define a Plugin class" % module)
+
+ options = config.get_plugin_options(module)
+ plugin = plugin_class(options)
+ plugin._coverage_plugin_name = module
+ plugin._coverage_enabled = True
+ plugins.order.append(plugin)
+ plugins.names[module] = plugin
+
+ return plugins
+
+ def __nonzero__(self):
+ return bool(self.order)
+
+ __bool__ = __nonzero__
+
+ def __iter__(self):
+ return iter(self.order)
+
+ def get(self, plugin_name):
+ """Return a plugin by name."""
+ return self.names[plugin_name]