Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    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)