Source code for benchbuild.experiments
"""
Experiments module.
Experiments are discovered automatically by benchbuild.
You can configure the modules we search for experiments with the settings:
BB_PLUGINS_AUTOLOAD=True
BB_PLUGINS_EXPERIMENTS=[...]
Any subclass of benchbuild.experiments.Experiment will be automatically registered and
made available on the command line.
"""
import logging
import importlib
from benchbuild.settings import CFG
LOG = logging.getLogger(__name__)
[docs]def discover():
"""
Import all experiments listed in PLUGINS_EXPERIMENTS.
Tests:
>>> from benchbuild.settings import CFG
>>> from benchbuild.experiments import discover
>>> import logging as lg
>>> import sys
>>> l = lg.getLogger('benchbuild')
>>> lg.getLogger('benchbuild').setLevel(lg.DEBUG)
>>> lg.getLogger('benchbuild').handlers = [lg.StreamHandler(stream=sys.stdout)]
>>> CFG["plugins"]["experiments"] = ["benchbuild.non.existing", "benchbuild.experiments.raw"]
>>> discover()
Could not find 'benchbuild.non.existing'
ImportError: No module named 'benchbuild.non'
"""
if CFG["plugins"]["autoload"]:
experiment_plugins = CFG["plugins"]["experiments"].value
for exp_plugin in experiment_plugins:
try:
importlib.import_module(exp_plugin)
except ImportError as import_error:
LOG.error("Could not find '%s'", exp_plugin)
LOG.error("ImportError: %s", import_error.msg)