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)
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])