Commit 687937d5 authored by Cage, Gregory's avatar Cage, Gregory
Browse files

Add api endpoints to expose finish job early functionality

parent 2e81c346
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ from galaxy.schema.types import OffsetNaiveDatetime
from galaxy.web import (
    expose_api,
    expose_api_anonymous,
    expose_api_anonymous_and_sessionless,
    require_admin,
)
from galaxy.webapps.base.controller import UsesVisualizationMixin
@@ -339,6 +340,27 @@ class JobController(BaseGalaxyAPIController, UsesVisualizationMixin):
            exceptions.RequestParameterInvalidException(f"Job with id '{job.tool_id}' is not paused")
        return self.__dictify_associations(trans, job.output_datasets, job.output_library_datasets)

    @expose_api_anonymous_and_sessionless
    def finish(self, trans: ProvidesUserContext, id, **kwd) -> List[dict]:
        """
        * PUT /api/jobs/{id}/finish
            Finished a job regardless of execution status (ie early job finish)

        :type   id: stromg
        :param  id: Encoded job id

        :rtype:     list of dicts
        :returns:   list of dictionaries containing output dataset associations
        """
        job = self.__get_job(trans, id)
        if not job:
            raise exceptions.ObjectNotFound("Could not access job with the given id")
        if job.state == job.states.RUNNING:
            self.job_manager.finish_early(job)
        else:
            exceptions.RequestParameterInvalidException(f"Job with id '{job.tool_id}' is not running.")
        return self.__dictify_associations(trans, job.output_datasets, job.output_library_datasets)

    @expose_api_anonymous
    def metrics(self, trans: ProvidesUserContext, **kwd):
        """
+3 −0
Original line number Diff line number Diff line
@@ -1004,6 +1004,9 @@ def populate_api_routes(webapp, app):
    webapp.mapper.connect(
        "resume", "/api/jobs/{id}/resume", controller="jobs", action="resume", conditions=dict(method=["PUT"])
    )
    webapp.mapper.connect(
        "finish", "/api/jobs/{id}/finish", controller="jobs", action="finish", conditions=dict(method=["PUT"])
    )
    webapp.mapper.connect(
        "job_error", "/api/jobs/{id}/error", controller="jobs", action="error", conditions=dict(method=["POST"])
    )