diff --git a/lib/galaxy/jobs/__init__.py b/lib/galaxy/jobs/__init__.py index bbb215ed2e2..87463cea547 100644 --- a/lib/galaxy/jobs/__init__.py +++ b/lib/galaxy/jobs/__init__.py @@ -1173,6 +1173,9 @@ class JobWrapper(HasResourceParameters): "destination for completion of fail method", self.get_id_tag(), str(exc.failure_message)) self.job_runner_mapper.cached_job_destination = JobDestination(id='__fail__') + # Might be AssertionError or other exception + message = str(message) + # if the job was deleted, don't fail it if not job.state == job.states.DELETED: # Check if the failure is due to an exception diff --git a/lib/galaxy/jobs/mapper.py b/lib/galaxy/jobs/mapper.py index 6be1e20ec82..8d50ad0a9b8 100644 --- a/lib/galaxy/jobs/mapper.py +++ b/lib/galaxy/jobs/mapper.py @@ -207,6 +207,10 @@ class JobRunnerMapper(object): return job_destination def __determine_job_destination(self, params, raw_job_destination=None): + if self.job_wrapper.tool is None: + raise JobMappingException( + "Can't map job to destination, tool '%s' is unavailable" % self.job_wrapper.get_job().tool_id + ) if raw_job_destination is None: raw_job_destination = self.job_wrapper.tool.get_job_destination(params) if raw_job_destination.runner == DYNAMIC_RUNNER_NAME: diff --git a/test/integration/test_fail_job_tool_unavailable.py b/test/integration/test_fail_job_tool_unavailable.py index c6297cff2c6..f317dd8fe83 100644 --- a/test/integration/test_fail_job_tool_unavailable.py +++ b/test/integration/test_fail_job_tool_unavailable.py @@ -1,4 +1,5 @@ import time + from base import integration_util from base.populators import ( DatasetPopulator,