Example #1
0
    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'))
Example #2
0
    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'))
Example #3
0
    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'))
Example #4
0
 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])
Example #5
0
    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
Example #6
0
    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
Example #7
0
    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
Example #8
0
    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)
Example #9
0
 def mk_psi(pos):
     psi = PortSpecItem(module="Module",
                        package=basic_pkg,
                        namespace="",
                        pos=pos)
     return psi