def extra_configuration_collection(self, configuration): """Hook to do any extra configuration collection or converter registration""" configuration["__imported__"] = {} configuration["__registered__"] = {} configuration["__active_modules__"] = {} def make_converter(name, spec): def converter(p, v): log.info("Converting %s", p) meta = Meta(p.configuration, [(name, "")]) configuration.converters.started(p) return spec.normalise(meta, v) return converter configuration.install_converters(DashMatConverters(), make_converter) if "modules" in configuration: for module_name, module_options in list(configuration["modules"].items()): if "import_path" in module_options: module = module_import_spec(Module).normalise( Meta(configuration, []).at("modules").at(module_name), module_options["import_path"] ) import_path = "{0}:{1}".format(module.module_path, module.__name__) self.activate_module(module_name, import_path, module, configuration) configuration[["modules", module_name, "import_path"]] = module
def activate_module(self, name, import_path, module, configuration): imported = configuration["__imported__"] registered = configuration["__registered__"] module_options = configuration["modules"] active_modules = configuration["__active_modules__"] if import_path not in imported: imported[import_path] = module configuration["__registered__"].update(imported[import_path].register_configuration()) if import_path not in module_options and name == import_path: module_options[import_path] = ModuleOptions(import_path=import_path, server_options={}, active=True) for dependency in imported[import_path].dependencies(): if dependency in imported: m = imported[dependency] else: m = module_import_spec(Module).normalise(Meta(configuration, []), dependency) ip = "{0}:{1}".format(m.module_path, m.__name__) self.activate_module(ip, ip, m, configuration) if name not in active_modules: active_modules[name] = imported[import_path](name, import_path)