Ejemplo n.º 1
0
    def update_pipeline(self, force_reexec=False):
        """Updates the recipe and execute the workflow if enough ports are set.
        """
        # Look this recipe up in the VistrailData
        vistraildata = VistrailManager(self._controller)
        recipe = DATRecipe(self._plot, self._parameters)

        # Try to get an existing pipeline for this cell
        pipeline = self.get_pipeline()

        try:
            # No pipeline: build one
            if pipeline is None:
                pipeline = vistrails_interface.create_pipeline(
                    self._controller,
                    recipe,
                    self.cellInfo.row,
                    self.cellInfo.column,
                    vistraildata.sheetname_var(self.cellInfo.tab),
                    typecast=self._typecast)
                recipe = pipeline.recipe
                new_params_it = recipe.parameters.iteritems()
                self._parameters = {
                    param: list(values)
                    for param, values in new_params_it
                }
                vistraildata.created_pipeline(self.cellInfo, pipeline)

            # Pipeline with a different content: update it
            elif pipeline.recipe != recipe:
                try:
                    pipeline = vistrails_interface.update_pipeline(
                        self._controller,
                        pipeline,
                        recipe,
                        typecast=self._typecast)
                except vistrails_interface.UpdateError, e:
                    warnings.warn("Could not update pipeline, creating new "
                                  "one:\n"
                                  "%s" % e)
                    pipeline = vistrails_interface.create_pipeline(
                        self._controller,
                        recipe,
                        self.cellInfo.row,
                        self.cellInfo.column,
                        vistraildata.sheetname_var(self.cellInfo.tab),
                        typecast=self._typecast)
                recipe = pipeline.recipe
                new_params_it = recipe.parameters.iteritems()
                self._parameters = {
                    param: list(values)
                    for param, values in new_params_it
                }
                vistraildata.created_pipeline(self.cellInfo, pipeline)

            # Nothing changed
            elif not force_reexec:
                return True
Ejemplo n.º 2
0
 def okClicked(self):
     mngr = VistrailManager(self.cell._controller)
     pipeline = mngr.get_pipeline(self.cell.cellInfo)
     if pipeline.version != self.cell._controller.current_version:
         new_pipeline = PipelineInformation(
             self.cell._controller.current_version,
             pipeline.recipe,
             pipeline.conn_map,
             pipeline.port_map)
         mngr.created_pipeline(self.cell.cellInfo, new_pipeline)
         self.cell.update_pipeline(True)
     else:
         self.cell._set_overlay(None)