Unverified Commit 06a43944 authored by mvdbeek's avatar mvdbeek
Browse files

Fix conditional database operation tool step skipping

parent 6bb9bc69
Loading
Loading
Loading
Loading
+16 −2
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ class ModelOperationToolAction(DefaultToolAction):
        execution_cache=None,
        collection_info=None,
        job_callback=None,
        skip=False,
        **kwargs,
    ):
        incoming = incoming or {}
@@ -93,11 +94,15 @@ class ModelOperationToolAction(DefaultToolAction):
            history=history,
            tags=preserved_tags,
            hdca_tags=preserved_hdca_tags,
            skip=skip,
        )
        self._record_inputs(trans, tool, job, incoming, inp_data, inp_dataset_collections)
        self._record_outputs(job, out_data, output_collections)
        if job_callback:
            job_callback(job)
        if skip:
            job.state = job.states.SKIPPED
        else:
            job.state = job.states.OK
        trans.sa_session.add(job)

@@ -108,7 +113,7 @@ class ModelOperationToolAction(DefaultToolAction):
        return job, out_data, history

    def _produce_outputs(
        self, trans: "ProvidesUserContext", tool, out_data, output_collections, incoming, history, tags, hdca_tags
        self, trans: "ProvidesUserContext", tool, out_data, output_collections, incoming, history, tags, hdca_tags, skip
    ):
        tag_handler = trans.tag_handler
        tool.produce_outputs(
@@ -128,4 +133,13 @@ class ModelOperationToolAction(DefaultToolAction):
                    value.visible = False
                    mapped_over_elements[name].hda = value

        # We probably need to mark all outputs as skipped, not just the outputs of whatever the database op tools do ?
        # This is probably not exactly right, but it might also work in most cases
        if skip:
            for output_collection in output_collections.out_collections.values():
                output_collection.mark_as_populated()
            for hdca in output_collections.out_collection_instances.values():
                hdca.visible = False
        # Would we also need to replace the datasets with skipped datasets?

        trans.sa_session.add_all(out_data.values())