summaryrefslogtreecommitdiff
path: root/coverage/control.py
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2015-01-01 06:48:18 -0500
committerNed Batchelder <ned@nedbatchelder.com>2015-01-01 06:48:18 -0500
commit3699416b508085a8fc1e7fa77ed6fe6c219617f0 (patch)
treeae0c92d33c65607f0a504746c853611e164413e7 /coverage/control.py
parent1440b69fab484580404be21101179b7fc7a02057 (diff)
downloadpython-coveragepy-git-3699416b508085a8fc1e7fa77ed6fe6c219617f0.tar.gz
Move Plugins so that plugin.py is just interface definitions
Diffstat (limited to 'coverage/control.py')
-rw-r--r--coverage/control.py39
1 files changed, 38 insertions, 1 deletions
diff --git a/coverage/control.py b/coverage/control.py
index 26f2fc7e..ef430150 100644
--- a/coverage/control.py
+++ b/coverage/control.py
@@ -15,7 +15,7 @@ from coverage.collector import Collector
from coverage.config import CoverageConfig
from coverage.data import CoverageData
from coverage.debug import DebugControl
-from coverage.plugin import CoveragePlugin, Plugins
+from coverage.plugin import CoveragePlugin
from coverage.files import FileLocator, TreeMatcher, FnmatchMatcher
from coverage.files import PathAliases, find_python_files, prep_patterns
from coverage.files import ModuleMatcher
@@ -989,3 +989,40 @@ def process_startup():
# A hack for debugging testing in sub-processes.
_TEST_NAME_FILE = "" # "/tmp/covtest.txt"
+
+
+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 plugin_class:
+ options = config.get_plugin_options(module)
+ plugin = plugin_class(options)
+ plugin.plugin_name = module
+ plugins.order.append(plugin)
+ plugins.names[module] = plugin
+
+ return plugins
+
+ def __iter__(self):
+ return iter(self.order)
+
+ def get(self, module):
+ return self.names[module]