def test_warn_if_multiple_plugins_add_option(): base_config_spec = {"Server": {"DEPLOY": {"type": "string"}}} plugin_config_spec = { "Lever": { "DEPLOY": { "type": "string", "default": "you got served" } } } plugin_options_mock1 = ModuleType("options_mock") setattr(plugin_options_mock1, "option_spec", plugin_config_spec) plugin_mock1 = MagicMock(options_module=plugin_options_mock1, module_path="test1") plugin_options_mock2 = ModuleType("options_mock") setattr(plugin_options_mock2, "option_spec", plugin_config_spec) plugin_mock2 = MagicMock(options_module=plugin_options_mock2, module_path="test2") plugin_mock1._module_path.return_value = "test1" plugin_mock1._module_path.return_value = "test2" plugins = [plugin_mock1, plugin_mock2] with patch("kolibri.plugins.utils.options.registered_plugins", plugins): with patch("kolibri.plugins.utils.options.warnings") as warnings_mock: extend_config_spec(base_config_spec) assert warnings_mock.warn.called
def test_raise_if_overwrite_core_option(): base_config_spec = {"Server": {"DEPLOY": {"type": "string"}}} plugin_options_mock = ModuleType("options_mock") setattr(plugin_options_mock, "option_spec", base_config_spec) plugin_mock = MagicMock(options_module=plugin_options_mock) plugins = [plugin_mock] with pytest.raises(ValueError): with patch("kolibri.plugins.utils.options.registered_plugins", plugins): extend_config_spec(base_config_spec)
def test_not_raise_if_overwrite_core_option_default_only(): base_config_spec = { "Server": { "DEPLOY": { "type": "string", "default": "hey you!" } } } plugin_config_spec = {"Server": {"DEPLOY": {"default": "you got served"}}} plugin_options_mock = ModuleType("options_mock") setattr(plugin_options_mock, "option_spec", plugin_config_spec) plugin_mock = MagicMock(options_module=plugin_options_mock) plugins = [plugin_mock] try: with patch("kolibri.plugins.utils.options.registered_plugins", plugins): extend_config_spec(base_config_spec) except ValueError: pytest.fail( "Error raised when only overwriting the default value of a core option" )
def test_can_update_default(): base_config_spec = { "Server": { "DEPLOY": { "type": "string", "default": "why thank you!" } } } plugin_config_spec = {"Server": {"DEPLOY": {"default": "you got served"}}} plugin_options_mock = ModuleType("options_mock") setattr(plugin_options_mock, "option_spec", plugin_config_spec) plugin_mock = MagicMock(options_module=plugin_options_mock) plugins = [plugin_mock] with patch("kolibri.plugins.utils.options.registered_plugins", plugins): final_spec = extend_config_spec(base_config_spec) assert (final_spec["Server"]["DEPLOY"]["default"] == plugin_config_spec["Server"]["DEPLOY"]["default"])
def test_can_add_to_plugin_section(): base_config_spec = {} plugin_config_spec1 = {"Bursar": {"GOODBOY": {"type": "string"}}} plugin_mock1 = MagicMock() plugin_options_mock1 = ModuleType("options_mock") setattr(plugin_options_mock1, "option_spec", plugin_config_spec1) plugin_mock1 = MagicMock(options_module=plugin_options_mock1) plugin_config_spec2 = {"Bursar": {"BADBOY": {"type": "string"}}} plugin_options_mock2 = ModuleType("options_mock") setattr(plugin_options_mock2, "option_spec", plugin_config_spec2) plugin_mock2 = MagicMock(options_module=plugin_options_mock2) plugins = [plugin_mock1, plugin_mock2] with patch("kolibri.plugins.utils.options.registered_plugins", plugins): final_spec = extend_config_spec(base_config_spec) assert (final_spec["Bursar"]["GOODBOY"] == plugin_config_spec1["Bursar"]["GOODBOY"]) assert final_spec["Bursar"]["BADBOY"] == plugin_config_spec2["Bursar"][ "BADBOY"]
def _get_option_spec(): """ Combine the default option spec with any options that are defined in plugins """ option_spec = extend_config_spec(base_option_spec) envvars = set() for section, opts in option_spec.items(): for optname, attrs in opts.items(): opt_envvars = attrs.get("envvars", tuple()) default_envvar = "KOLIBRI_{}".format(optname.upper()) if default_envvar not in envvars: envvars.add(default_envvar) else: logging.warn( "Duplicate environment variable for options {}".format( default_envvar)) default_envvar = "KOLIBRI_{}_{}".format( section.upper(), optname.upper()) if default_envvar not in opt_envvars: attrs["envvars"] = opt_envvars + (default_envvar, ) return option_spec
def test_can_add_to_base_section(): base_config_spec = { "Server": { "DEPLOY": { "type": "string", "default": "why thank you!" } } } plugin_config_spec = {"Server": {"GOODBOY": {"type": "string"}}} plugin_mock = MagicMock() plugin_settings_mock = ModuleType("settings_mock") setattr(plugin_settings_mock, "option_spec", plugin_config_spec) plugin_mock.options_module.return_value = plugin_settings_mock plugins = [plugin_mock] with patch("kolibri.plugins.utils.options.registered_plugins", plugins): final_spec = extend_config_spec(base_config_spec) assert final_spec["Server"]["DEPLOY"] == base_config_spec["Server"][ "DEPLOY"] assert (final_spec["Server"]["GOODBOY"] == plugin_config_spec["Server"] ["GOODBOY"])
def _get_option_spec(): """ Combine the default option spec with any options that are defined in plugins """ return extend_config_spec(base_option_spec)