Unverified Commit 36ea7dad authored by Marius van den Beek's avatar Marius van den Beek Committed by GitHub
Browse files

Merge pull request #20259 from mvdbeek/fix_rerun_button_dynamic_tools

Fix job rerun for dynamic tools
parents 45fdb1de 3eaa78b7
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -219,6 +219,9 @@ export default {
            const { id, version } = this.formConfig;
            return id.endsWith(version) ? id : `${id}/${version}`;
        },
        toolUuid() {
            return this.uuid || this.formConfig.uuid;
        },
        tooltip() {
            if (!this.canMutateHistory) {
                return this.immutableHistoryMessage;
@@ -287,7 +290,7 @@ export default {
        onUpdate() {
            this.disabled = true;
            console.debug("ToolForm - Updating input parameters.", this.formData);
            updateToolFormData(this.formConfig.id, this.uuid, this.currentVersion, this.history_id, this.formData)
            updateToolFormData(this.formConfig.id, this.toolUuid, this.currentVersion, this.history_id, this.formData)
                .then((data) => {
                    this.formConfig = data;
                })
@@ -339,7 +342,7 @@ export default {
                history_id: historyId,
                tool_id: this.formConfig.id,
                tool_version: this.formConfig.version,
                tool_uuid: this.uuid,
                tool_uuid: this.toolUuid,
                inputs: {
                    ...this.formData,
                },
+2 −2
Original line number Diff line number Diff line
@@ -2754,7 +2754,7 @@ class MinimalJobWrapper(HasResourceParameters):

    def _report_error(self):
        job = self.get_job()
        tool = self.app.toolbox.tool_for_job(job)
        tool = self.app.toolbox.tool_for_job(job, check_access=False)
        for dataset in job.output_datasets:
            self.app.error_reports.default_error_plugin.submit_report(dataset, job, tool, user_submission=False)

@@ -2777,7 +2777,7 @@ class JobWrapper(MinimalJobWrapper):
            job,
            app=app,
            use_persisted_destination=use_persisted_destination,
            tool=app.toolbox.tool_for_job(job, exact=True),
            tool=app.toolbox.tool_for_job(job, exact=True, check_access=False),
        )
        self.queue = queue
        self.job_runner_mapper = JobRunnerMapper(self, queue.dispatcher.url_to_destination, self.app.job_config)
+3 −1
Original line number Diff line number Diff line
@@ -758,7 +758,9 @@ class _UnflattenedMetadataDatasetAssociationSerializer(base.ModelSerializer[T],
        """
        dataset = item
        if dataset.creating_job:
            tool = self.app.toolbox.get_tool(dataset.creating_job.tool_id, dataset.creating_job.tool_version)
            tool = self.app.toolbox.tool_for_job(
                dataset.creating_job, exact=False, check_access=True, user=context.get("user")
            )
            if tool and tool.is_workflow_compatible:
                return True
        return False
+17 −2
Original line number Diff line number Diff line
@@ -639,8 +639,15 @@ class ToolBox(AbstractToolBox):
            return tool
        return None

    def tool_for_job(self, job: model.Job, exact=True) -> Optional["Tool"]:
    def tool_for_job(
        self, job: model.Job, exact=True, check_access=True, user: Optional[model.User] = None
    ) -> Optional["Tool"]:
        if job.dynamic_tool:
            if check_access:
                if not user:
                    return None
                if not job.dynamic_tool.public:
                    self.app.dynamic_tool_manager.ensure_can_use_unprivileged_tool(user)
            return self.dynamic_tool_to_tool(job.dynamic_tool)
        else:
            return self.get_tool(job.tool_id, tool_version=job.tool_version, exact=exact)
@@ -2794,6 +2801,9 @@ class Tool(UsesDictVisibleKeys):
        tool_dict["is_workflow_compatible"] = self.is_workflow_compatible
        tool_dict["xrefs"] = self.xrefs

        if self.dynamic_tool:
            tool_dict["uuid"] = str(self.dynamic_tool.uuid)

        # Fill in ToolShedRepository info
        if hasattr(self, "tool_shed") and self.tool_shed:
            tool_dict["tool_shed_repository"] = {
@@ -3016,12 +3026,16 @@ class Tool(UsesDictVisibleKeys):

        visit_input_values(tool_inputs, params, mapping_callback)

    def _compare_tool_version(self, job):
    def _compare_tool_version(self, job: Job):
        """
        Compares a tool version with the tool version from a job (from ToolRunner).
        """
        tool_id = job.tool_id
        tool_version = job.tool_version
        if job.dynamic_tool_id:
            # This is the exact tool that was used to run the job.
            # We don't need to compare the version.
            return None
        message = ""
        try:
            select_field, tools, tool = self.app.toolbox.get_tool_components(
@@ -3031,6 +3045,7 @@ class Tool(UsesDictVisibleKeys):
                raise exceptions.MessageException(
                    f"This dataset was created by an obsolete tool ({tool_id}). Can't re-run."
                )
            assert tool_id
            if (self.id != tool_id and self.old_id != tool_id) or self.version != tool_version:
                if self.id == tool_id:
                    if tool_version:
+1 −1
Original line number Diff line number Diff line
@@ -639,7 +639,7 @@ class JobController(BaseGalaxyAPIController, UsesVisualizationMixin):
        job = self.__get_job(trans, id)
        if not job:
            raise exceptions.ObjectNotFound("Could not access job with the given id")
        tool = self.app.toolbox.get_tool(job.tool_id, kwd.get("tool_version") or job.tool_version)
        tool = self.app.toolbox.tool_for_job(job, exact=False, check_access=True, user=trans.user)
        if tool is None:
            raise exceptions.ObjectNotFound("Requested tool not found")
        if not tool.is_workflow_compatible:
Loading