def convert(_port_spec): if _port_spec.__class__ == PortSpec: return _port_spec.__class__ = PortSpec for _port_spec_item in _port_spec.db_portSpecItems: PortSpecItem.convert(_port_spec_item) _port_spec._short_sigstring = None _port_spec._tooltip = None _port_spec._shape = None _port_spec._docstring = None _port_spec.is_valid = True _port_spec.port_spec_items.sort(key=operator.attrgetter('db_pos'))
def convert(_port_spec): from vistrails.core.modules.module_registry import module_registry_loaded, \ ModuleRegistryException if _port_spec.__class__ == PortSpec: return _port_spec.__class__ = PortSpec for _port_spec_item in _port_spec.db_portSpecItems: PortSpecItem.convert(_port_spec_item) _port_spec._short_sigstring = None _port_spec._tooltip = None _port_spec._shape = None _port_spec._docstring = None _port_spec.is_valid = True _port_spec.port_spec_items.sort(key=operator.attrgetter('db_pos'))
def test_create_from_items(self): basic_pkg = get_vistrails_basic_pkg_id() item_a = PortSpecItem(pos=0, package=basic_pkg, module="Integer", label="a", default="123") item_b = PortSpecItem(pos=1, package=basic_pkg, module="String", label="b", default="abc") port_spec = PortSpec(id=-1, name="SetValue", type='input', portSpecItems=[item_a, item_b])
def create_workflow(self, c): upgrade_test_pkg = 'org.vistrails.vistrails.tests.upgrade' d1 = ModuleDescriptor(package=upgrade_test_pkg, name='TestUpgradeA', namespace='', package_version='0.8') m1 = c.create_module_from_descriptor(d1, use_desc_pkg_version=True) m1.is_valid = False c.add_module_action(m1) d2 = ModuleDescriptor(package=upgrade_test_pkg, name='TestUpgradeB', namespace='', package_version='0.8') m2 = c.create_module_from_descriptor(d2, use_desc_pkg_version=True) m2.is_valid = False c.add_module_action(m2) basic_pkg = get_vistrails_basic_pkg_id() psi = PortSpecItem(module="Float", package=basic_pkg, namespace="", pos=0) function_port_spec = PortSpec(name="a", type="input", items=[psi]) f = c.create_function(m1, function_port_spec, [12]) c.add_function_action(m1, f) conn_out_psi = PortSpecItem(module="Integer", package=basic_pkg, namespace="", pos=0) conn_out_spec = PortSpec(name="z", type="output", items=[conn_out_psi]) conn_in_psi = PortSpecItem(module="Integer", package=basic_pkg, namespace="", pos=0) conn_in_spec = PortSpec(name="b", type="input", items=[conn_in_psi]) conn = c.create_connection(m1, conn_out_spec, m2, conn_in_spec) c.add_connection_action(conn) return c.current_version
def get_items_from_entries(self, signature, *attrs): # This is reasonably messy code. The intent is that a # signature given by the user in a call like this # add_input_port(module, name, signature) should be one of the # following: # type only: add_input_port(_, _, Float) # type plus description: add_input_port(_, _, (Float, 'radius')) # multiple parameters, where each parameter can be either of the above: # add_input_port(_, _, [Float, (Integer, 'count')]) registry = get_module_registry() entries = [] def canonicalize(sig_item): if isinstance(sig_item, tuple): # assert len(sig_item) == 2 # assert isinstance(sig_item[0], type) # assert isinstance(sig_item[1], str) descriptor = registry.get_descriptor(sig_item[0]) label = sig_item[1] return (descriptor, label) elif isinstance(sig_item, list): descriptor = registry.get_descriptor_by_name( get_vistrails_basic_pkg_id(), 'List') return (descriptor, None) else: # isinstance(sig_item, type): return (registry.get_descriptor(sig_item), None) # def _add_entry(sig_item): ps_items = [] if not isinstance(signature, list): signature = [signature] self._resize_attrs(signature, *attrs) for i, item_tuple in enumerate(izip(signature, *attrs)): descriptor, item_label = canonicalize(item_tuple[0]) kwargs = self._set_attrs(None, *item_tuple[1:]) if not kwargs['label']: if item_label != "<no description>": kwargs['label'] = item_label ps_item = PortSpecItem(pos=i, package=descriptor.identifier, module=descriptor.name, namespace=descriptor.namespace, **kwargs) ps_items.append(ps_item) return ps_items
def get_items_from_sigstring(self, sigstring, *attrs): ps_items = [] specs_list = parse_port_spec_string(sigstring) if len(specs_list) == 0: return ps_items self._resize_attrs(specs_list, *attrs) for i, item_tuple in enumerate(izip(specs_list, *attrs)): kwargs = self._set_attrs(None, *item_tuple[1:]) ps_item = PortSpecItem(pos=i, package=item_tuple[0][0], module=item_tuple[0][1], namespace=item_tuple[0][2], **kwargs) ps_items.append(ps_item) return ps_items
def setupUi(self, overlayed): _ = translate(VariableDroppingOverlay) main_layout = QtGui.QVBoxLayout() name_layout = QtGui.QHBoxLayout() name_label = QtGui.QLabel(self._cell._plot.name + " (") name_label.setObjectName('plot_name') name_layout.addWidget(name_label) name_layout.addStretch() if not overlayed: show_adv_config = QtGui.QPushButton("config") self.connect(show_adv_config, QtCore.SIGNAL('clicked()'), self.show_advanced_config) name_layout.addWidget(show_adv_config) main_layout.addLayout(name_layout) spacing_layout = QtGui.QHBoxLayout() spacing_layout.addSpacing(20) ports_layout = QtGui.QFormLayout() ports_layout.setFieldGrowthPolicy( QtGui.QFormLayout.AllNonFixedFieldsGrow) self._parameters = [] # [[widget]] self._constant_widgets = dict() # widget -> port self._unset_constant_labels = dict() # widget -> QtGui.QLabel for i, port in enumerate(self._cell._plot.ports): widgets = [] if isinstance(port, DataPort): param_panel = QtGui.QWidget() param_panel.setLayout(QtGui.QVBoxLayout()) # Style changes according to the compatibility of the port with # the variable being dragged if self._compatible_ports is not None: compatible = self._compatible_ports[i] else: compatible = '' pos = 0 for pos, variable in enumerate( self._cell._parameters.get(port.name, [])): param = DataParameter(self, port.name, pos, variable=variable.variable, typecast=variable.typecast) param.setProperty('compatible', compatible) param.setProperty('optional', port.optional) param.setProperty('targeted', 'no') widgets.append(param) param_panel.layout().addWidget(param) if ((port.multiple_values and compatible == 'yes') or not self._cell._parameters.get(port.name)): param = DataParameter(self, port.name, pos, variable=None, append=compatible == 'yes') param.setProperty('compatible', compatible) param.setProperty('optional', port.optional) param.setProperty('targeted', 'no') widgets.append(param) param_panel.layout().addWidget(param) else: # isinstance(port, ConstantPort): gp = GuiParameter(port.type) gp.port_spec_item = PortSpecItem(id=-1, pos=0, module=port.type.name, package=port.type.package, default=port.default_value, entry_type=port.entry_type, values=port.enum_values) try: gp.strValue = self._cell._parameters[port.name][0].constant isset = True except KeyError: isset = False param = port.widget_class(gp) self._constant_widgets[param] = port.name param.contentsChanged.connect(self.constant_changed) param_panel = QtGui.QWidget() param_panel.setLayout(QtGui.QHBoxLayout()) param_panel.layout().addWidget(param) if not isset: label = QtGui.QLabel(_("(not set)")) if not port.optional: label.setStyleSheet('QLabel { color: red; }') else: label.setStyleSheet('QLabel { color: grey; }') param_panel.layout().addWidget(label) self._unset_constant_labels[param] = label label = QtGui.QLabel(port.name) label.setBuddy(param_panel) self._parameters.append(widgets) ports_layout.addRow(label, param_panel) # Closing parenthesis paren_label = QtGui.QLabel(")") paren_label.setObjectName('closing_paren') ports_layout.addRow(paren_label) spacing_layout.addLayout(ports_layout) main_layout.addLayout(spacing_layout) main_layout.addStretch(1) if (not overlayed and self._cell.widget() is not None and self._constant_widgets): self._execute_button = QtGui.QPushButton(_("Execute")) self.connect(self._execute_button, QtCore.SIGNAL('clicked()'), lambda: self._cell._set_overlay(None)) self._execute_button.setEnabled(False) self._cancel_button = QtGui.QPushButton(_("Cancel changes")) def cancel_pending(): self._cell._cancel_pending() self._execute_button.setEnabled(False) self._cancel_button.setEnabled(False) self.connect(self._cancel_button, QtCore.SIGNAL('clicked()'), cancel_pending) self._cancel_button.setEnabled(False) buttons = QtGui.QHBoxLayout() buttons.addStretch(1) buttons.addWidget(self._execute_button) buttons.addWidget(self._cancel_button) main_layout.addLayout(buttons) else: self._execute_button = None self._cancel_button = None self.setLayout(main_layout)
def mk_psi(pos): psi = PortSpecItem(module="Module", package=basic_pkg, namespace="", pos=pos) return psi