Source code for capsul.engine.module.matlab

# -*- coding: utf-8 -*-
from __future__ import absolute_import

import capsul.engine
import os

#from soma.controller import Controller
#from traits.api import File, Undefined, Instance

    
def init_settings(capsul_engine):
    with capsul_engine.settings as settings:
        settings.ensure_module_fields('matlab',
        [dict(name='executable',
              type='string',
              description='Full path of the matlab executable'),
         dict(name='mcr_directory',
              type='string',
              description='Full path of the matlab MCR directory, for use '
                  'with standalone binaries'),
         ])


[docs] def check_configurations(): ''' Check if the activated configuration is valid for Matlab and return an error message if there is an error or None if everything is good. ''' matlab_executable = capsul.engine.configurations.get( 'capsul.engine.module.matlab', {}).get('executable') mcr = capsul.engine.configurations.get( 'capsul.engine.module.matlab', {}).get('mcr_directory') if not matlab_executable and not mcr: return \ 'both matlab.executable and matlab.mcr_directory are not defined' if matlab_executable and not os.path.exists(matlab_executable): return 'Matlab executable is defined as "%s" but this path does not exist' % matlab_executable 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 ('executable', 'mcr_directory'): if getattr(conf, k, None) is None: invalid.append(k) if len(invalid) == 1: # if one of the paths is filled, then it should be OK. # however it may depend on uses (SPM standalone needs mcr_directory, # for instance) return [] return invalid
[docs] def edition_widget(engine, environment, config_id='matlab'): ''' Edition GUI for matlab 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} if controller.executable in (None, traits.Undefined, ''): values['executable'] = None else: values['executable'] = controller.executable if controller.mcr_directory in (None, traits.Undefined, ''): values['mcr_directory'] = None else: values['mcr_directory'] = controller.mcr_directory if conf is None: session.new_config(config_id, widget.environment, values) else: for k in ('executable', 'mcr_directory', ): # don't check invalid files: they may be valid on a remote # server #if (k == 'mcr_directory' and #values[k] and #not os.path.isdir(values[k])): #raise NotADirectoryError('\nMatlab mcr_directory ' #'was not updated:\n{} is ' #'not existing!'.format( #values[k])) #elif (k == 'executable' and #values[k] and #not os.path.isfile(values[k])): #raise FileNotFoundError('\nMatlab executable ' #'was not updated:\n{} is ' #'not existing!'.format( #values[k])) #else: setattr(conf, k, values[k]) controller = Controller() controller.add_trait('executable', traits.File(desc= 'Full path of the matlab executable')) controller.add_trait('mcr_directory', traits.Directory(desc='Full path of the matlab MCR ' 'directory, or use with standalone ' 'binaries')) conf = engine.settings.select_configurations( environment, {'matlab': 'any'}) if conf: controller.executable = conf.get( 'capsul.engine.module.matlab', {}).get('executable', traits.Undefined) controller.mcr_directory = conf.get( 'capsul.engine.module.matlab', {}).get('mcr_directory', traits.Undefined) widget = ScrollControllerWidget(controller, live=True) widget.engine = engine widget.environment = environment widget.accept = types.MethodType(validate_config, widget) return widget