blob: 7ba305379078463786c2fe0e1e361ff045b67622 [file] [log] [blame]
import importlib
import imp
from .browsers import product_list
def products_enabled(config):
names = config.get("products", {}).keys()
if not names:
return product_list
else:
return names
def product_module(config, product):
if product not in products_enabled(config):
raise ValueError("Unknown product %s" % product)
path = config.get("products", {}).get(product, None)
if path:
module = imp.load_source('wptrunner.browsers.' + product, path)
else:
module = importlib.import_module("wptrunner.browsers." + product)
if not hasattr(module, "__wptrunner__"):
raise ValueError("Product module does not define __wptrunner__ variable")
return module
class Product(object):
def __init__(self, config, product):
module = product_module(config, product)
data = module.__wptrunner__
self.name = product
self.check_args = getattr(module, data["check_args"])
self.browser_cls = getattr(module, data["browser"])
self.get_browser_kwargs = getattr(module, data["browser_kwargs"])
self.get_executor_kwargs = getattr(module, data["executor_kwargs"])
self.env_options = getattr(module, data["env_options"])()
self.get_env_extras = getattr(module, data["env_extras"])
self.run_info_extras = (getattr(module, data["run_info_extras"])
if "run_info_extras" in data else lambda **kwargs:{})
self.get_timeout_multiplier = getattr(module, data["timeout_multiplier"])
self.executor_classes = {}
for test_type, cls_name in data["executor"].items():
cls = getattr(module, cls_name)
self.executor_classes[test_type] = cls
def load_product(config, product, load_cls=False):
rv = Product(config, product)
if not load_cls:
return (rv.check_args,
rv.browser_cls,
rv.get_browser_kwargs,
rv.executor_classes,
rv.get_executor_kwargs,
rv.env_options,
rv.get_env_extras,
rv.run_info_extras)
return rv
def load_product_update(config, product):
"""Return tuple of (property_order, boolean_properties) indicating the
run_info properties to use when constructing the expectation data for
this product. None for either key indicates that the default keys
appropriate for distinguishing based on platform will be used."""
module = product_module(config, product)
data = module.__wptrunner__
update_properties = (getattr(module, data["update_properties"])()
if "update_properties" in data else {})
return update_properties