diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2015-01-01 06:48:18 -0500 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2015-01-01 06:48:18 -0500 |
commit | 3699416b508085a8fc1e7fa77ed6fe6c219617f0 (patch) | |
tree | ae0c92d33c65607f0a504746c853611e164413e7 /coverage/control.py | |
parent | 1440b69fab484580404be21101179b7fc7a02057 (diff) | |
download | python-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.py | 39 |
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] |