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