def run_parameter_exploration(locator, pe_id, extra_info = {}, reason="Console Mode Parameter Exploration Execution"): """run_parameter_exploration(w_list: (locator, version), pe_id: str/int, reason: str) -> (pe_id, [error msg]) Run parameter exploration in w, and returns an interpreter result object. version can be a tag name or a version id. """ if is_running_gui(): from vistrails.gui.vistrail_controller import VistrailController as \ GUIVistrailController try: (v, abstractions , thumbnails, mashups) = load_vistrail(locator) controller = GUIVistrailController(v, locator, abstractions, thumbnails, mashups) try: pe_id = int(pe_id) pe = controller.vistrail.get_paramexp(pe_id) except ValueError: pe = controller.vistrail.get_named_paramexp(pe_id) controller.change_selected_version(pe.action_id) controller.executeParameterExploration(pe, extra_info=extra_info, showProgress=False) except Exception, e: return (locator, pe_id, debug.format_exception(e), debug.format_exc())
def run_parameter_exploration( locator, pe_id, extra_info={}, reason="Console Mode Parameter Exploration Execution"): """run_parameter_exploration(w_list: (locator, version), pe_id: str/int, reason: str) -> (pe_id, [error msg]) Run parameter exploration in w, and returns an interpreter result object. version can be a tag name or a version id. """ if is_running_gui(): from vistrails.gui.vistrail_controller import VistrailController as \ GUIVistrailController try: (v, abstractions, thumbnails, mashups) = load_vistrail(locator) controller = GUIVistrailController(v, locator, abstractions, thumbnails, mashups) try: pe_id = int(pe_id) pe = controller.vistrail.get_paramexp(pe_id) except ValueError: pe = controller.vistrail.get_named_paramexp(pe_id) controller.change_selected_version(pe.action_id) controller.executeParameterExploration(pe, extra_info=extra_info, showProgress=False) except Exception, e: return (locator, pe_id, debug.format_exception(e), debug.format_exc())
def copyVistrailController(vt_controller, view=DummyView()): vistrail = vt_controller.vistrail newvt_controller = VistrailController(vistrail, None, pipeline_view=view) current_log = vt_controller.log newvt_controller.log = current_log newvt_controller.disable_autosave() return newvt_controller
def get_wf_graph(w_list, output_dir=None, pdf=False): """run_and_get_results(w_list: list of (locator, version), output_dir:str, pdf:bool) Load all workflows in wf_list and dump their graph to output_dir. """ result = [] if is_running_gui(): from vistrails.gui.vistrail_controller import VistrailController as \ GUIVistrailController for locator, workflow in w_list: try: (v, abstractions, thumbnails, mashups) = load_vistrail(locator) controller = GUIVistrailController(v, locator, abstractions, thumbnails, mashups, auto_save=False) version = None if isinstance(workflow, basestring): version = v.get_version_number(workflow) elif isinstance(workflow, (int, long)): version = workflow elif workflow is None: version = controller.get_latest_version_in_graph() else: msg = "Invalid version tag or number: %s" % workflow raise VistrailsInternalError(msg) if (output_dir is not None and controller.current_pipeline is not None): controller.updatePipelineScene() if pdf: base_fname = "%s_%s_pipeline.pdf" % \ (locator.short_filename, version) filename = os.path.join(output_dir, base_fname) controller.current_pipeline_scene.saveToPDF(filename) else: base_fname = "%s_%s_pipeline.png" % \ (locator.short_filename, version) filename = os.path.join(output_dir, base_fname) controller.current_pipeline_scene.saveToPNG(filename) result.append((True, "")) except Exception, e: result.append((False, debug.format_exception(e)))
def build_widget(self): layout = QtGui.QVBoxLayout() layout.setMargin(0) layout.setSpacing(0) self.query_controller = QueryController(self) self.vt_controller = VistrailController(auto_save=False) self.p_controller = VistrailController(Vistrail(), auto_save=False) self.connect(self.p_controller, QtCore.SIGNAL('vistrailChanged()'), self.vistrailChanged) self.query_box = QQueryBox() self.query_box.set_controller(self.query_controller) layout.addWidget(self.query_box) self.stacked_widget = QtGui.QStackedWidget() self.pipeline_view = QQueryPipelineView() self.p_controller.current_pipeline_view = self.pipeline_view self.pipeline_view.set_controller(self.p_controller) self.pipeline_view.set_query_controller(self.query_controller) QQueryView.VISUAL_SEARCH_VIEW = \ self.stacked_widget.addWidget(self.pipeline_view) self.global_result_view = QQueryResultGlobalView() QQueryView.GLOBAL_RESULT_VIEW = \ self.stacked_widget.addWidget(self.global_result_view) self.version_result_view = QQueryResultVersionView() self.connect(self.version_result_view.scene(), QtCore.SIGNAL('versionSelected(int,bool,bool,bool,bool)'), self.result_version_selected) # self.version_result_view.set_controller(self.vt_controller) QQueryView.VERSION_RESULT_VIEW = \ self.stacked_widget.addWidget(self.version_result_view) self.workflow_result_view = QQueryResultWorkflowView() # self.workflow_result_view.set_controller(self.vt_controller) QQueryView.WORKFLOW_RESULT_VIEW = \ self.stacked_widget.addWidget(self.workflow_result_view) self.stacked_widget.setCurrentWidget(self.pipeline_view) layout.addWidget(self.stacked_widget) self.setLayout(layout) self.current_display = QQueryView.VISUAL_SEARCH_VIEW self.current_result_view = QQueryView.VERSION_RESULT_VIEW
def get_wf_graph(w_list, output_dir=None, pdf=False): """run_and_get_results(w_list: list of (locator, version), output_dir:str, pdf:bool) Load all workflows in wf_list and dump their graph to output_dir. """ result = [] if is_running_gui(): from vistrails.gui.vistrail_controller import VistrailController as \ GUIVistrailController for locator, workflow in w_list: try: (v, abstractions , thumbnails, mashups) = load_vistrail(locator) controller = GUIVistrailController(v, locator, abstractions, thumbnails, mashups, auto_save=False) version = None if isinstance(workflow, basestring): version = v.get_version_number(workflow) elif isinstance(workflow, (int, long)): version = workflow elif workflow is None: version = controller.get_latest_version_in_graph() else: msg = "Invalid version tag or number: %s" % workflow raise VistrailsInternalError(msg) if (output_dir is not None and controller.current_pipeline is not None): controller.updatePipelineScene() if pdf: base_fname = "%s_%s_pipeline.pdf" % \ (locator.short_filename, version) filename = os.path.join(output_dir, base_fname) controller.current_pipeline_scene.saveToPDF(filename) else: base_fname = "%s_%s_pipeline.png" % \ (locator.short_filename, version) filename = os.path.join(output_dir, base_fname) controller.current_pipeline_scene.saveToPNG(filename) result.append((True, "")) except Exception, e: result.append((False, debug.format_exception(e)))
class QQueryView(QtGui.QWidget, BaseView): VISUAL_SEARCH_VIEW = 0 GLOBAL_RESULT_VIEW = 1 VERSION_RESULT_VIEW = 2 WORKFLOW_RESULT_VIEW = 3 RESULT_LEVEL_MAP = \ Bidict([(QueryController.LEVEL_ALL, GLOBAL_RESULT_VIEW), (QueryController.LEVEL_VISTRAIL, VERSION_RESULT_VIEW), (QueryController.LEVEL_WORKFLOW, WORKFLOW_RESULT_VIEW)]) def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) BaseView.__init__(self) self.build_widget() self.set_title("Search") def set_controller(self, controller=None): if self.controller: self.disconnect(self.controller, QtCore.SIGNAL('stateChanged'), self.update_controller) self.controller = controller if controller: self.connect(self.controller, QtCore.SIGNAL('stateChanged'), self.update_controller) self.vt_controller.vistrail_view = self.version_result_view self.vt_controller.current_pipeline_view = \ self.workflow_result_view # self.vt_controller.vistrail_view.set_controller(self.vt_controller) # FIXME Need to figure out how to deal with this !!! self.vt_controller.set_vistrail(controller.vistrail, None, set_log_on_vt=False) hide_upgrades = not getattr(get_vistrails_configuration(), 'hideUpgrades', True) self.vt_controller.change_selected_version(controller.current_version, hide_upgrades, hide_upgrades) self.version_result_view.set_controller(self.vt_controller) self.workflow_result_view.set_controller(self.vt_controller) self.query_controller.set_vistrail_controller(controller) def update_controller(self): # FIXME Need to figure out how to deal with this !!! self.vt_controller.set_vistrail(self.controller.vistrail, None, set_log_on_vt=False) hide_upgrades = getattr(get_vistrails_configuration(), 'hideUpgrades', True) self.vt_controller.change_selected_version( self.controller.current_version, hide_upgrades, hide_upgrades) def build_widget(self): layout = QtGui.QVBoxLayout() layout.setMargin(0) layout.setSpacing(0) self.query_controller = QueryController(self) self.vt_controller = VistrailController(auto_save=False) self.p_controller = VistrailController(Vistrail(), auto_save=False) self.connect(self.p_controller, QtCore.SIGNAL('vistrailChanged()'), self.vistrailChanged) self.query_box = QQueryBox() self.query_box.set_controller(self.query_controller) layout.addWidget(self.query_box) self.stacked_widget = QtGui.QStackedWidget() self.pipeline_view = QQueryPipelineView() self.p_controller.current_pipeline_view = self.pipeline_view self.pipeline_view.set_controller(self.p_controller) self.pipeline_view.set_query_controller(self.query_controller) QQueryView.VISUAL_SEARCH_VIEW = \ self.stacked_widget.addWidget(self.pipeline_view) self.global_result_view = QQueryResultGlobalView() QQueryView.GLOBAL_RESULT_VIEW = \ self.stacked_widget.addWidget(self.global_result_view) self.version_result_view = QQueryResultVersionView() self.connect(self.version_result_view.scene(), QtCore.SIGNAL('versionSelected(int,bool,bool,bool,bool)'), self.result_version_selected) # self.version_result_view.set_controller(self.vt_controller) QQueryView.VERSION_RESULT_VIEW = \ self.stacked_widget.addWidget(self.version_result_view) self.workflow_result_view = QQueryResultWorkflowView() # self.workflow_result_view.set_controller(self.vt_controller) QQueryView.WORKFLOW_RESULT_VIEW = \ self.stacked_widget.addWidget(self.workflow_result_view) self.stacked_widget.setCurrentWidget(self.pipeline_view) layout.addWidget(self.stacked_widget) self.setLayout(layout) self.current_display = QQueryView.VISUAL_SEARCH_VIEW self.current_result_view = QQueryView.VERSION_RESULT_VIEW def set_default_layout(self): from vistrails.gui.module_palette import QModulePalette from vistrails.gui.module_info import QModuleInfo self.set_palette_layout({ QtCore.Qt.LeftDockWidgetArea: QModulePalette, QtCore.Qt.RightDockWidgetArea: QModuleInfo, }) def set_action_links(self): self.action_links = \ { 'execute': ('query_pipeline_changed', self.set_execute_action) } # also add other notification here... from vistrails.gui.vistrails_window import _app _app.register_notification('query_pipeline_changed', self.set_reset_button) def set_reset_button(self, pipeline): self.query_box.setManualResetEnabled(self.pipeline_non_empty(pipeline)) def set_result_level(self, level): view_idx = QQueryView.RESULT_LEVEL_MAP[level] if self.current_display != QQueryView.VISUAL_SEARCH_VIEW: self.set_display_view(view_idx) self.current_result_view = view_idx self.query_controller.update_results() def set_to_search_mode(self): self.set_display_view(QQueryView.VISUAL_SEARCH_VIEW) self.query_box.backButton.setEnabled(False) self.query_box.editButton.setEnabled(False) self.set_reset_button(self.p_controller.current_pipeline) from vistrails.gui.vistrails_window import _app _app.notify('query_pipeline_changed', self.p_controller.current_pipeline) def set_to_result_mode(self): self.set_display_view(self.current_result_view) self.query_box.backButton.setEnabled(True) if self.query_controller.level >= QueryController.LEVEL_VISTRAIL: self.query_box.editButton.setEnabled(True) self.query_box.setManualResetEnabled(True) from vistrails.gui.vistrails_window import _app _app.notify('query_pipeline_changed', self.p_controller.current_pipeline) def set_display_view(self, view_type): self.current_display = view_type self.stacked_widget.setCurrentIndex(view_type) def get_current_view(self): return self.stacked_widget.currentWidget() def set_action_defaults(self): self.action_defaults = \ { 'execute': [('setEnabled', True, self.set_execute_action), ('setIcon', False, CurrentTheme.VISUAL_QUERY_ICON), ('setToolTip', False, 'Execute a visual query')], 'publishWeb': [('setEnabled', False, False)], 'publishPaper': [('setEnabled', False, False)], } def set_execute_action(self, pipeline=None): if not self.vt_controller: return False if pipeline is None: pipeline = self.p_controller.current_pipeline if self.current_display == QQueryView.VISUAL_SEARCH_VIEW: return self.pipeline_non_empty(pipeline) return False def pipeline_non_empty(self, pipeline): return pipeline is not None and len(pipeline.modules) > 0 def vistrailChanged(self): from vistrails.gui.vistrails_window import _app self.p_controller.current_pipeline.ensure_connection_specs() _app.notify('query_pipeline_changed', self.p_controller.current_pipeline) def query_changed(self, query=None): if query is None: self.query_controller.reset_search() # FIXME add support for changing the query to something specific # DAK: removed this call as the query view maintains its own # "current version" # def version_changed(self, version_id): # self.vt_controller.change_selected_version(version_id) # self.version_result_view.select_current_version() # self.query_controller.update_results() def result_version_selected(self, version_id, by_click, do_validate=True, from_root=False, double_click=False): if by_click: hide_upgrades = getattr(get_vistrails_configuration(), 'hideUpgrades', True) self.query_controller.search.setCurrentController( self.vt_controller) self.vt_controller.change_selected_version(version_id, hide_upgrades, hide_upgrades, from_root) if double_click: self.query_controller.set_level(QueryController.LEVEL_WORKFLOW) self.query_controller.show_workflow_matches()
class QQueryView(QtGui.QWidget, BaseView): VISUAL_SEARCH_VIEW = 0 GLOBAL_RESULT_VIEW = 1 VERSION_RESULT_VIEW = 2 WORKFLOW_RESULT_VIEW = 3 RESULT_LEVEL_MAP = \ Bidict([(QueryController.LEVEL_ALL, GLOBAL_RESULT_VIEW), (QueryController.LEVEL_VISTRAIL, VERSION_RESULT_VIEW), (QueryController.LEVEL_WORKFLOW, WORKFLOW_RESULT_VIEW)]) def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) BaseView.__init__(self) self.build_widget() self.set_title("Search") def set_controller(self, controller=None): if self.controller: self.disconnect(self.controller, QtCore.SIGNAL('stateChanged'), self.update_controller) self.controller = controller if controller: self.connect(self.controller, QtCore.SIGNAL('stateChanged'), self.update_controller) self.vt_controller.vistrail_view = self.version_result_view self.vt_controller.current_pipeline_view = \ self.workflow_result_view # self.vt_controller.vistrail_view.set_controller(self.vt_controller) # FIXME Need to figure out how to deal with this !!! self.vt_controller.set_vistrail(controller.vistrail, None, set_log_on_vt=False) self.vt_controller.change_selected_version(controller.current_version) self.version_result_view.set_controller(self.vt_controller) self.workflow_result_view.set_controller(self.vt_controller) self.query_controller.set_vistrail_controller(controller) def update_controller(self): # FIXME Need to figure out how to deal with this !!! self.vt_controller.set_vistrail(self.controller.vistrail, None, set_log_on_vt=False) self.vt_controller.change_selected_version( self.controller.current_version) def build_widget(self): layout = QtGui.QVBoxLayout() layout.setMargin(0) layout.setSpacing(0) self.query_controller = QueryController(self) self.vt_controller = VistrailController(auto_save=False) self.p_controller = VistrailController(Vistrail(), auto_save=False) self.connect(self.p_controller, QtCore.SIGNAL('vistrailChanged()'), self.vistrailChanged) self.query_box = QQueryBox() self.query_box.set_controller(self.query_controller) layout.addWidget(self.query_box) self.stacked_widget = QtGui.QStackedWidget() self.pipeline_view = QQueryPipelineView() self.p_controller.current_pipeline_view = self.pipeline_view self.pipeline_view.set_controller(self.p_controller) self.pipeline_view.set_query_controller(self.query_controller) QQueryView.VISUAL_SEARCH_VIEW = \ self.stacked_widget.addWidget(self.pipeline_view) self.global_result_view = QQueryResultGlobalView() QQueryView.GLOBAL_RESULT_VIEW = \ self.stacked_widget.addWidget(self.global_result_view) self.version_result_view = QQueryResultVersionView() self.connect(self.version_result_view.scene(), QtCore.SIGNAL('versionSelected(int,bool,bool,bool,bool)'), self.result_version_selected) # self.version_result_view.set_controller(self.vt_controller) QQueryView.VERSION_RESULT_VIEW = \ self.stacked_widget.addWidget(self.version_result_view) self.workflow_result_view = QQueryResultWorkflowView() # self.workflow_result_view.set_controller(self.vt_controller) QQueryView.WORKFLOW_RESULT_VIEW = \ self.stacked_widget.addWidget(self.workflow_result_view) self.stacked_widget.setCurrentWidget(self.pipeline_view) layout.addWidget(self.stacked_widget) self.setLayout(layout) self.current_display = QQueryView.VISUAL_SEARCH_VIEW self.current_result_view = QQueryView.VERSION_RESULT_VIEW def set_default_layout(self): from vistrails.gui.module_palette import QModulePalette from vistrails.gui.module_info import QModuleInfo self.set_palette_layout( {QtCore.Qt.LeftDockWidgetArea: QModulePalette, QtCore.Qt.RightDockWidgetArea: QModuleInfo, }) def set_action_links(self): self.action_links = \ { 'execute': ('query_pipeline_changed', self.set_execute_action) } # also add other notification here... from vistrails.gui.vistrails_window import _app _app.register_notification('query_pipeline_changed', self.set_reset_button) def set_reset_button(self, pipeline): self.query_box.setManualResetEnabled(self.pipeline_non_empty(pipeline)) def set_result_level(self, level): view_idx = QQueryView.RESULT_LEVEL_MAP[level] if self.current_display != QQueryView.VISUAL_SEARCH_VIEW: self.set_display_view(view_idx) self.current_result_view = view_idx self.query_controller.update_results() def set_to_search_mode(self): self.set_display_view(QQueryView.VISUAL_SEARCH_VIEW) self.query_box.backButton.setEnabled(False) self.query_box.editButton.setEnabled(False) self.set_reset_button(self.p_controller.current_pipeline) from vistrails.gui.vistrails_window import _app _app.notify('query_pipeline_changed', self.p_controller.current_pipeline) def set_to_result_mode(self): self.set_display_view(self.current_result_view) self.query_box.backButton.setEnabled(True) if self.query_controller.level >= QueryController.LEVEL_VISTRAIL: self.query_box.editButton.setEnabled(True) self.query_box.setManualResetEnabled(True) from vistrails.gui.vistrails_window import _app _app.notify('query_pipeline_changed', self.p_controller.current_pipeline) def set_display_view(self, view_type): self.current_display = view_type self.stacked_widget.setCurrentIndex(view_type) def get_current_view(self): return self.stacked_widget.currentWidget() def set_action_defaults(self): self.action_defaults = \ { 'execute': [('setEnabled', True, self.set_execute_action), ('setIcon', False, CurrentTheme.VISUAL_QUERY_ICON), ('setToolTip', False, 'Execute a visual query')], 'publishWeb': [('setEnabled', False, False)], 'publishPaper': [('setEnabled', False, False)], } def set_execute_action(self, pipeline=None): if not self.vt_controller: return False if pipeline is None: pipeline = self.p_controller.current_pipeline if self.current_display == QQueryView.VISUAL_SEARCH_VIEW: return self.pipeline_non_empty(pipeline) return False def pipeline_non_empty(self, pipeline): return pipeline is not None and len(pipeline.modules) > 0 def vistrailChanged(self): from vistrails.gui.vistrails_window import _app self.p_controller.current_pipeline.ensure_connection_specs() _app.notify('query_pipeline_changed', self.p_controller.current_pipeline) def query_changed(self, query=None): if query is None: self.query_controller.reset_search() # FIXME add support for changing the query to something specific # DAK: removed this call as the query view maintains its own # "current version" # def version_changed(self, version_id): # self.vt_controller.change_selected_version(version_id) # self.version_result_view.select_current_version() # self.query_controller.update_results() def result_version_selected(self, version_id, by_click, do_validate=True, from_root=False, double_click=False): if by_click: self.query_controller.search.setCurrentVistrail( self.vt_controller.vistrail) self.vt_controller.change_selected_version(version_id, by_click, do_validate, from_root) if double_click: self.query_controller.set_level(QueryController.LEVEL_WORKFLOW) self.query_controller.show_workflow_matches()