Пример #1
0
def edition_widget(engine, environment):
    ''' Edition GUI for FSL 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):
        controller = widget.controller_widget.controller
        with widget.engine.settings as session:
            conf = session.config('fsl', widget.environment)
            values = {'config_id': 'fsl'}
            for k in ('directory', 'config', 'prefix'):
                value = getattr(controller, k)
                if value is traits.Undefined:
                    value = None
                values[k] = value
            if conf is None:
                session.new_config('fsl', widget.environment, values)
            else:
                for k, value in values.items():
                    if k == 'config_id':
                        continue
                    setattr(conf, k, values[k])

    controller = Controller()

    controller.add_trait(
        'directory',
        traits.Directory(traits.Undefined,
                         desc='Directory where FSL is installed'))
    controller.add_trait(
        'config',
        traits.File(traits.Undefined,
                    output=False,
                    desc='Parameter to specify the fsl.sh path'))
    controller.add_trait(
        'prefix',
        traits.String(traits.Undefined, desc='Prefix to add to FSL commands'))

    conf = engine.settings.select_configurations(environment, {'fsl': 'any'})
    if conf:
        fconf = conf.get('capsul.engine.module.fsl', {})
        controller.directory = fconf.get('directory', traits.Undefined)
        controller.config = fconf.get('config', traits.Undefined)
        controller.prefix = fconf.get('prefix', traits.Undefined)

    widget = ScrollControllerWidget(controller, live=True)
    widget.engine = engine
    widget.environment = environment
    widget.accept = types.MethodType(validate_config, widget)

    return widget
Пример #2
0
def edition_widget(engine, environment):
    ''' 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):
        controller = widget.controller_widget.controller
        with widget.engine.settings as session:
            conf = session.config('axon', widget.environment)
            values = {'config_id': 'axon', '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('axon', 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
Пример #3
0
def edition_widget(engine, environment):
    ''' Edition GUI for python config - see
    :class:`~capsul.qt_gui.widgets.settings_editor.SettingsEditor`
    '''
    from soma.qt_gui.qt_backend import Qt
    from soma.qt_gui.controller_widget import ScrollControllerWidget
    from soma.controller import Controller
    import types
    import traits.api as traits

    def validate_config(widget):
        controller = widget.controller_widget.controller
        with widget.engine.settings as session:
            conf = session.config('python', widget.environment)
            values = {'config_id': 'python', 'path': controller.path}
            if controller.executable in (None, traits.Undefined, ''):
                values['executable'] = None
            else:
                values['executable'] = controller.executable
            if conf is None:
                session.new_config('python', widget.environment, values)
            else:
                for k in ('path', 'executable'):
                    setattr(conf, k, values[k])

    controller = Controller()
    controller.add_trait('executable',
                         traits.Str(desc='Full path of the python executable'))
    controller.add_trait(
        'path',
        traits.List(traits.Directory(), [],
                    desc='paths to prepend to sys.path'))

    conf = engine.settings.select_configurations(environment,
                                                 {'python': 'any'})
    if conf:
        controller.executable = conf.get('capsul.engine.module.python',
                                         {}).get('executable',
                                                 traits.Undefined)
        controller.path = conf.get('capsul.engine.module.python',
                                   {}).get('path', [])

    widget = ScrollControllerWidget(controller, live=True)
    widget.engine = engine
    widget.environment = environment
    widget.accept = types.MethodType(validate_config, widget)

    return widget
Пример #4
0
def edition_widget(engine, environment):
    ''' Edition GUI for AFNI 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):
        controller = widget.controller_widget.controller
        with widget.engine.settings as session:
            conf = session.config('afni', widget.environment)
            values = {'config_id': 'afni'}
            for k in ['directory']:
                value = getattr(controller, k)
                if value is traits.Undefined:
                    value = None
                values[k] = value
            if conf is None:
                session.new_config('afni', widget.environment, values)
            else:
                for k, value in values.items():
                    if k == 'config_id':
                        continue
                    setattr(conf, k, values[k])

    controller = Controller()

    controller.add_trait(
        'directory',
        traits.Directory(traits.Undefined,
                         desc='Directory where AFNI is installed'))

    conf = engine.settings.select_configurations(environment, {'afni': 'any'})
    if conf:
        fconf = conf.get('capsul.engine.module.afni', {})
        controller.directory = fconf.get('directory', traits.Undefined)

    widget = ScrollControllerWidget(controller, live=True)
    widget.engine = engine
    widget.environment = environment
    widget.accept = types.MethodType(validate_config, widget)

    return widget
Пример #5
0
def edition_widget(engine, environment):
    ''' Edition GUI for attributes 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):
        controller = widget.controller_widget.controller
        with widget.engine.settings as session:
            conf = session.config('attributes', widget.environment)
            values = {'config_id': 'attributes'}
            values['attributes_schema_paths'] \
                = controller.attributes_schema_paths
            values['attributes_schemas'] = controller.attributes_schemas
            values['process_completion'] = controller.process_completion
            if controller.process_completion is traits.Undefined:
                values['process_completion'] = None
            values['path_completion'] = controller.path_completion
            if controller.path_completion is traits.Undefined:
                values['path_completion'] = None
            if conf is None:
                session.new_config('attributes', widget.environment, values)
            else:
                for k in ('attributes_schema_paths', 'attributes_schemas',
                          'process_completion', 'path_completion'):
                    setattr(conf, k, values[k])

    controller = Controller()
    controller.add_trait(
        'attributes_schema_paths',
        traits.List(traits.Str(), desc='attributes shchemas modules names'))
    controller.add_trait(
        'attributes_schemas',
        traits.DictStrStr(desc='attributes shchemas names'))
    controller.add_trait(
        'process_completion',
        traits.Str(desc='process completion model name'))
    controller.add_trait(
        'path_completion',
        traits.Str(desc='path completion model name',
                   optional=True))

    conf = engine.settings.select_configurations(
        environment, {'attributes': 'any'})
    if conf:
        aconf = conf.get(
            'capsul.engine.module.attributes', {})
        controller.attributes_schema_paths = aconf.get(
            'attributes_schema_paths', [])
        controller.attributes_schemas = aconf.get(
            'attributes_schemas', {})
        controller.process_completion = aconf.get(
            'process_completion', 'builtin')
        controller.path_completion = aconf.get(
            'path_completion', traits.Undefined)

    widget = ScrollControllerWidget(controller, live=True)
    widget.engine = engine
    widget.environment = environment
    widget.accept = types.MethodType(validate_config, widget)

    return widget
Пример #6
0
def edition_widget(engine, environment):
    ''' Edition GUI for FOM 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

    def validate_config(widget):
        controller = widget.controller_widget.controller
        with widget.engine.settings as session:
            conf = session.config('fom', widget.environment)
            values = {'config_id': 'fom'}
            for k in ('input_fom', 'output_fom', 'shared_fom',
                      'volumes_format', 'meshes_format', 'auto_fom',
                      'fom_path', 'input_directory', 'output_directory'):
                value = getattr(controller, k)
                if value is traits.Undefined:
                    if k in ('fom_path', ):
                        value = []
                    else:
                        value = None
                values[k] = value
            if conf is None:
                session.new_config('fom', widget.environment, values)
            else:
                for k, value in values.items():
                    if k == 'config_id':
                        continue
                    setattr(conf, k, values[k])

    controller = Controller()

    controller.add_trait(
        'input_fom',
        traits.Str(traits.Undefined, output=False, desc='input FOM'))
    controller.add_trait(
        'output_fom',
        traits.Str(traits.Undefined, output=False, desc='output FOM'))
    controller.add_trait(
        'shared_fom',
        traits.Str(traits.Undefined, output=False, desc='shared data FOM'))
    controller.add_trait(
        'volumes_format',
        traits.Str(traits.Undefined,
                   output=False,
                   desc='Format used for volumes'))
    controller.add_trait(
        'meshes_format',
        traits.Str(traits.Undefined,
                   output=False,
                   desc='Format used for meshes'))
    controller.add_trait(
        'auto_fom',
        traits.Bool(
            True,
            output=False,
            desc='Look in all FOMs when a process is not found (in '
            'addition to the standard share/foms). Note that auto_fom '
            'looks for the first FOM matching the process to get '
            'completion for, and does not handle ambiguities. Moreover '
            'it brings an overhead (typically 6-7 seconds) the first '
            'time it is used since it has to parse all available FOMs.'))
    controller.add_trait(
        'fom_path',
        traits.List(
            traits.Directory(output=False),
            desc='list of additional directories where to look for FOMs'))
    # FIXME: until directories are included in another config module
    controller.add_trait(
        'input_directory',
        traits.Directory(traits.Undefined,
                         output=False,
                         desc='input study data directory'))
    controller.add_trait(
        'output_directory',
        traits.Directory(traits.Undefined,
                         output=False,
                         desc='output study data directory'))

    conf = engine.settings.select_configurations(environment, {'fom': 'any'})
    if conf:
        fconf = conf.get('capsul.engine.module.fom', {})
        controller.input_fom = fconf.get('input_fom', traits.Undefined)
        controller.output_fom = fconf.get('output_fom', traits.Undefined)
        controller.shared_fom = fconf.get('shared_fom', traits.Undefined)
        controller.volumes_format = fconf.get('volumes_format',
                                              traits.Undefined)
        controller.meshes_format = fconf.get('meshes_format', traits.Undefined)
        controller.auto_fom = fconf.get('auto_fom', traits.Undefined)
        controller.fom_path = fconf.get('fom_path', traits.Undefined)
        controller.input_directory = fconf.get('input_directory',
                                               traits.Undefined)
        controller.output_directory = fconf.get('output_directory',
                                                traits.Undefined)

    widget = ScrollControllerWidget(controller, live=True)
    widget.engine = engine
    widget.environment = environment
    widget.accept = types.MethodType(validate_config, widget)

    return widget
Пример #7
0
def edition_widget(engine, environment):
    ''' Edition GUI for SPM 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):
        controller = widget.controller_widget.controller
        with widget.engine.settings as session:
            values = {}
            if controller.directory in (None, traits.Undefined, ''):
                values['directory'] = None
            else:
                values['directory'] = controller.directory
            values['standalone'] = controller.standalone
            values['version'] = controller.version
            id = 'spm%s%s' % (controller.version,
                              '-standalone' if controller.standalone else '')
            values['config_id'] = id
            query = 'config_id == "%s"' % id
            conf = session.config('spm', 'global', selection=query)
            if conf is None:
                session.new_config('spm', widget.environment, values)
            else:
                for k in ('directory', 'standalone', 'version'):
                    setattr(conf, k, values[k])

    controller = Controller()
    controller.add_trait(
        "directory",
        traits.Directory(traits.Undefined,
                         output=False,
                         desc="Directory containing SPM."))
    controller.add_trait(
        "standalone",
        traits.Bool(True, desc="If True, use the standalone version of SPM."))
    controller.add_trait(
        'version',
        traits.Str(traits.Undefined,
                   output=False,
                   desc='Version string for SPM: "12", "8", etc.'))

    conf = engine.settings.select_configurations(environment, {'spm': 'any'})
    if conf:
        controller.directory = conf.get('capsul.engine.module.spm',
                                        {}).get('directory', traits.Undefined)
        controller.standalone = conf.get('capsul.engine.module.spm',
                                         {}).get('standalone', True)
        controller.version = conf.get('capsul.engine.module.spm',
                                      {}).get('version', '12')

    # TODO handle several configs

    widget = ScrollControllerWidget(controller, live=True)
    widget.engine = engine
    widget.environment = environment
    widget.accept = types.MethodType(validate_config, widget)

    return widget