Exemple #1
0
    def connectPorts(self, moduleA, outputPortName, moduleB, inputPortName):
        """ connectPorts(moduleA: Module, outputPortName: str, moduleB: Module,
                         inputPortName: str) -> Connection
                         
        connectPorts connects moduleA's outputPort to moduleB's inputPort.
        """
        reg = api.get_module_registry()
        in_port = moduleA.get_port_spec(outputPortName, 'output')
        out_port = moduleB.get_port_spec(inputPortName, 'input')

        return api.add_connection(moduleA.id, outputPortName, moduleB.id,
                                  inputPortName)
Exemple #2
0
    def connectPorts(self, moduleA, outputPortName, moduleB, inputPortName):
        """ connectPorts(moduleA: Module, outputPortName: str, moduleB: Module,
                         inputPortName: str) -> Connection
                         
        connectPorts connects moduleA's outputPort to moduleB's inputPort.
        """
        reg = api.get_module_registry()
        in_port = moduleA.get_port_spec(outputPortName, 'output')
        out_port = moduleB.get_port_spec(inputPortName, 'input')

        return api.add_connection(moduleA.id, outputPortName, moduleB.id,
                                  inputPortName)
Exemple #3
0
    def _update_func(self, port_spec, *args, **kwargs):
        # print 'running _update_func', port_spec.name
        # print args

        if port_spec.type != 'input':
            if self._module.has_port_spec(port_spec.name, 'input'):
                port_spec = \
                    self._module.get_port_spec(port_spec.name, 'input')
            else:
                raise Exception("cannot update an output port spec")

        # FIXME deal with kwargs
        num_ports = 0
        num_params = 0
        for value in args:
            # print 'processing', type(value), value
            if isinstance(value, vistrails_port):
                # make connection to specified output port
                # print 'updating port'
                num_ports += 1
            elif isinstance(value, vistrails_module):
                # make connection to 'self' output port of value
                # print 'updating module'
                num_ports += 1
            else:
                # print 'update literal', type(value), value
                num_params += 1
        if num_ports > 1 or (num_ports == 1 and num_params > 0):
            reg = core.modules.module_registry.get_module_registry()
            tuple_desc = \
                reg.get_descriptor_by_name('edu.utah.sci.vistrails.basic',
                                           'Tuple', '')

            d = {
                '_module_desc': tuple_desc,
                '_package': self._package,
            }
            tuple = type('module', (vistrails_module, ), d)()

            output_port_spec = PortSpec(id=-1,
                                        name='value',
                                        type='output',
                                        sigstring=port_spec.sigstring)
            api.add_port_spec(tuple._module.id, output_port_spec)
            self._update_func(port_spec, *[tuple.value()])
            assert len(port_spec.descriptors()) == len(args)
            for i, descriptor in enumerate(port_spec.descriptors()):
                arg_name = 'arg%d' % i
                sigstring = "(" + descriptor.sigstring + ")"
                tuple_port_spec = PortSpec(id=-1,
                                           name=arg_name,
                                           type='input',
                                           sigstring=sigstring)
                api.add_port_spec(tuple._module.id, tuple_port_spec)
                tuple._process_attr_value(arg_name, args[i])

            # create tuple object
            pass
        elif num_ports == 1:
            other = args[0]
            if isinstance(other, vistrails_port):
                if other._port_spec.type != 'output':
                    other_module = other._vistrails_module._module
                    if other_module.has_port_spec(port_spec.name, 'output'):
                        other_port_spec = \
                            other_module.get_port_spec(port_spec.name,
                                                        'output')
                    else:
                        raise Exception("cannot update an input " "port spec")
                else:
                    other_port_spec = other._port_spec

                api.add_connection(other._vistrails_module._module.id,
                                   other_port_spec, self._module.id, port_spec)
            elif isinstance(other, vistrails_module):
                other_port_spec = \
                    other._module.get_port_spec('self', 'output')
                api.add_connection(other._module.id, other_port_spec,
                                   self._module.id, port_spec)
        else:
            api.change_parameter(self._module.id, port_spec.name,
                                 [str(x) for x in args])
    def _update_func(self, port_spec, *args, **kwargs):
        # print 'running _update_func', port_spec.name
        # print args

        if port_spec.type != 'input':
            if self._module.has_port_spec(port_spec.name, 'input'):
                port_spec = \
                    self._module.get_port_spec(port_spec.name, 'input')
            else:
                raise Exception("cannot update an output port spec")

        # FIXME deal with kwargs
        num_ports = 0
        num_params = 0
        for value in args:
            # print 'processing', type(value), value
            if isinstance(value, vistrails_port):
                # make connection to specified output port
                # print 'updating port'
                num_ports += 1
            elif isinstance(value, vistrails_module):
                # make connection to 'self' output port of value
                # print 'updating module'
                num_ports += 1
            else:
                # print 'update literal', type(value), value
                num_params += 1
        if num_ports > 1 or (num_ports == 1 and num_params > 0):
            reg = core.modules.module_registry.get_module_registry()
            tuple_desc = \
                reg.get_descriptor_by_name('edu.utah.sci.vistrails.basic',
                                           'Tuple', '')

            d = {'_module_desc': tuple_desc,
                 '_package': self._package,}
            tuple = type('module', (vistrails_module,), d)()

            output_port_spec = PortSpec(id=-1,
                                        name='value',
                                        type='output',
                                        sigstring=port_spec.sigstring)
            api.add_port_spec(tuple._module.id, output_port_spec)
            self._update_func(port_spec, *[tuple.value()])
            assert len(port_spec.descriptors()) == len(args)
            for i, descriptor in enumerate(port_spec.descriptors()):
                arg_name = 'arg%d' % i
                sigstring = "(" + descriptor.sigstring + ")"
                tuple_port_spec = PortSpec(id=-1,
                                           name=arg_name,
                                           type='input',
                                           sigstring=sigstring)
                api.add_port_spec(tuple._module.id, tuple_port_spec)
                tuple._process_attr_value(arg_name, args[i])
                
                
            # create tuple object
            pass
        elif num_ports == 1:
            other = args[0]
            if isinstance(other, vistrails_port):
                if other._port_spec.type != 'output':
                    other_module = other._vistrails_module._module
                    if other_module.has_port_spec(port_spec.name, 
                                                   'output'):
                        other_port_spec = \
                            other_module.get_port_spec(port_spec.name, 
                                                        'output')
                    else:
                        raise Exception("cannot update an input "
                                        "port spec")
                else:
                    other_port_spec = other._port_spec

                api.add_connection(other._vistrails_module._module.id,
                                   other_port_spec,
                                   self._module.id, 
                                   port_spec)
            elif isinstance(other, vistrails_module):
                other_port_spec = \
                    other._module.get_port_spec('self', 'output')
                api.add_connection(other._module.id, 
                                   other_port_spec,
                                   self._module.id,
                                   port_spec)
        else:
            api.change_parameter(self._module.id,
                                 port_spec.name,
                                 [str(x) for x in args])