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='string',
                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 getattr(conf, k, None) 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