def import_workflow_steps(self, workflow, wf_steps, view_steps):
        """
        Import all workflow steps for the given workflow. We create both wf_steps and view_steps
        in the same method, since if a wf_step has to be omited for some reason, we also need to
        omit that view step.
        :param workflow: a model.Workflow entity from which we need to add workflow steps
        :param wf_steps: a list of WorkflowStepInformation entities, from which we will rebuild \
                         the workflow steps
        :param view_steps: a list of WorkflowViewStepInformation entities, from which we will \
                           rebuild the workflow view steps

        """
        for wf_step in wf_steps:
            algorithm = wf_step.get_algorithm()
            if algorithm is None:
                # The algorithm is invalid for some reason. Just remove also the view step.
                position = wf_step.index()
                for entry in view_steps:
                    if entry.index() == position:
                        view_steps.remove(entry)
                continue
            wf_step_entity = model.WorkflowStep(algorithm.id)
            wf_step_entity.from_dict(wf_step.data)
            wf_step_entity.fk_workflow = workflow.id
            wf_step_entity.fk_operation = wf_step.get_operagion().id
            dao.store_entity(wf_step_entity)
        for view_step in view_steps:
            algorithm = view_step.get_algorithm()
            if algorithm is None:
                continue
            view_step_entity = model.WorkflowStepView(algorithm.id)
            view_step_entity.from_dict(view_step.data)
            view_step_entity.fk_workflow = workflow.id
            view_step_entity.fk_portlet = view_step.get_portlet().id
            dao.store_entity(view_step_entity)
Beispiel #2
0
    def load_burst_entity(self, json_burst, project_id):
        """
        Load BurstConfiguration from JSON (possibly exported from a different machine).
        Nothing gets persisted in DB or on disk.

        :param json_burst: Burst JSON export
        :param project_id: Current project ID (it will be used if the user later starts this simulation)
        :return: BurstConfiguration  filled from JSON
        """

        burst_information = BurstInformation.load_from_dict(json_burst)
        burst_entity = model.BurstConfiguration(project_id)
        burst_entity.from_dict(burst_information.data)
        burst_entity.prepare_after_load()
        burst_entity.reset_tabs()

        workflow_info = burst_information.get_workflows()[0]
        workflow_entity = model.Workflow(project_id, None)
        workflow_entity.from_dict(workflow_info.data)

        view_steps = workflow_info.get_view_steps()
        analyze_steps = workflow_info.get_workflow_steps()

        for view_step in view_steps:
            try:
                algorithm = view_step.get_algorithm()
                portlet = view_step.get_portlet()
                view_step_entity = model.WorkflowStepView(
                    algorithm.id, portlet_id=portlet.id)
                view_step_entity.from_dict(view_step.data)
                view_step_entity.workflow = workflow_entity

                ## For each visualize step, also load all of the analyze steps.
                analyzers = []
                for an_step in analyze_steps:
                    if (an_step.data["tab_index"] != view_step_entity.tab_index
                            or an_step.data["index_in_tab"] !=
                            view_step_entity.index_in_tab):
                        continue
                    algorithm = an_step.get_algorithm()
                    wf_step_entity = model.WorkflowStep(algorithm.id)
                    wf_step_entity.from_dict(an_step.data)
                    wf_step_entity.workflow = workflow_entity
                    analyzers.append(wf_step_entity)

                portlet = PortletConfiguration(portlet.id)
                portlet.set_visualizer(view_step_entity)
                portlet.set_analyzers(analyzers)
                burst_entity.set_portlet(view_step_entity.tab_index,
                                         view_step_entity.index_in_tab,
                                         portlet)

            except Exception:
                # only log exception and ignore this step from loading
                self.logger.exception("Could not restore Workflow Step " +
                                      view_step.get_algorithm().name)

        return burst_entity
Beispiel #3
0
 def create_workflow_step(module, classname, static_kwargs=None, dynamic_kwargs=None,
                          step_index=0, base_step=0, tab_index=0, index_in_tab=0, is_view_step=False):
     """
     Build non-persisted WorkflowStep entity.
     """
     if static_kwargs is None:
         static_kwargs = {}
     if dynamic_kwargs is None:
         dynamic_kwargs = {}
     algorithm = dao.get_algorithm_by_module(module, classname)
     second_step_configuration = wf_cfg(algorithm.id, static_kwargs, dynamic_kwargs)
     
     static_params = second_step_configuration.static_params
     dynamic_params = second_step_configuration.dynamic_params
     for entry in dynamic_params:
         dynamic_params[entry][wf_cfg.STEP_INDEX_KEY] += base_step
      
     if is_view_step:
         return model.WorkflowStepView(algorithm_id=algorithm.id, tab_index=tab_index, index_in_tab=index_in_tab,
                                       static_param=static_params, dynamic_param=dynamic_params)
     return model.WorkflowStep(algorithm_id=algorithm.id, step_index=step_index, tab_index=tab_index,
                               index_in_tab=index_in_tab, static_param=static_params, dynamic_param=dynamic_params)