Source code for capsul.engine.module.axon

# -*- coding: utf-8 -*-

"""
Configuration module which links with `Axon <http://brainvisa.info/axon/user_doc>`_
"""

from __future__ import absolute_import
import os
import six
import capsul.engine
import os.path as osp


def init_settings(capsul_engine):
    with capsul_engine.settings as settings:
        settings.ensure_module_fields(
            "axon",
            [
                dict(
                    name="shared_directory",
                    type="str",
                    description="Directory where BrainVisa shared data is installed",
                ),
                dict(
                    name="user_level",
                    type="int",
                    description="0: basic, 1: advanced, 2: expert, or more. "
                    "used to display or hide some advanced features or "
                    "process parameters that would be confusing to a novice "
                    "user",
                ),
            ],
        )

    with capsul_engine.settings as session:
        config = session.config("axon", "global")
        if not config:
            from soma import config as soma_config

            shared_dir = soma_config.BRAINVISA_SHARE

            values = {
                capsul_engine.settings.config_id_field: "axon",
                "shared_directory": shared_dir,
                "user_level": 0,
            }
            session.new_config("axon", "global", values)

    # link with StudyConfig
    if hasattr(capsul_engine, "study_config"):
        if "BrainVISAConfig" not in capsul_engine.study_config.modules:
            scmod = capsul_engine.study_config.load_module("BrainVISAConfig", {})
            scmod.initialize_module()
            scmod.initialize_callbacks()
        else:
            scmod = capsul_engine.study_config.modules["BrainVISAConfig"]
            scmod.sync_to_engine()


[docs] def check_configurations(): """ Checks if the activated configuration is valid to use BrainVisa and returns an error message if there is an error or None if everything is good. """ shared_dir = capsul.engine.configurations.get("axon", {}).get( "shared_directory", "" ) if not shared_dir: return "Axon shared_directory is not found" return None
[docs] def check_notably_invalid_config(conf): """ Checks if the given module config is obviously invalid, for instance if a mandatory path is not filled Returns ------- invalid: list list of invalid config keys """ invalid = [] for k in ("shared_directory",): if conf.get(k) is None: invalid.append(k) return invalid
[docs] def complete_configurations(): """ Try to automatically set or complete the capsul.engine.configurations for Axon. """ config = capsul.engine.configurations config = config.setdefault("axon", {}) shared_dir = config.get("shared_directory", None) if shared_dir is None: from soma import config as soma_config shared_dir = soma_config.BRAINVISA_SHARE if shared_dir: config["shared_directory"] = shared_dir
[docs] def edition_widget(engine, environment, config_id="axon"): """Edition GUI for axon config - see :class:`~capsul.qt_gui.widgets.settings_editor.SettingsEditor` """ from soma.qt_gui.controller_widget import ScrollControllerWidget from soma.controller import Controller import types import traits.api as traits def validate_config(widget): widget.update_controller() controller = widget.controller_widget.controller with widget.engine.settings as session: conf = session.config(config_id, widget.environment) values = {"config_id": config_id, "user_level": controller.user_level} if controller.shared_directory in (None, traits.Undefined, ""): values["shared_directory"] = None else: values["shared_directory"] = controller.shared_directory if conf is None: session.new_config(config_id, widget.environment, values) else: for k in ("shared_directory", "user_level"): setattr(conf, k, values[k]) controller = Controller() controller.add_trait( "shared_directory", traits.Directory(desc="Directory where BrainVisa " "shared data is installed"), ) controller.add_trait( "user_level", traits.Int( desc="0: basic, 1: advanced, 2: expert, or more. " "used to display or hide some advanced features or " "process parameters that would be confusing to a novice " "user" ), ) conf = engine.settings.select_configurations(environment, {"axon": "any"}) if conf: controller.shared_directory = conf.get("capsul.engine.module.axon", {}).get( "shared_directory", traits.Undefined ) controller.user_level = conf.get("capsul.engine.module.axon", {}).get( "user_level", 0 ) widget = ScrollControllerWidget(controller, live=True) widget.engine = engine widget.environment = environment widget.accept = types.MethodType(validate_config, widget) return widget