From 567dfba7324a46e78463850172d3a6fb15743b90 Mon Sep 17 00:00:00 2001 From: Sebastien Deschambault Date: Fri, 4 Aug 2023 15:10:10 -0400 Subject: [PATCH] Start new job API --- src/saturn_engine/core/api.py | 7 +++++++ src/saturn_engine/worker_manager/api/jobs.py | 20 ++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/src/saturn_engine/core/api.py b/src/saturn_engine/core/api.py index 436b8938..8d227273 100644 --- a/src/saturn_engine/core/api.py +++ b/src/saturn_engine/core/api.py @@ -177,6 +177,13 @@ class JobInput: error: Optional[str] = None +@dataclasses.dataclass +class StartJobInput: + name: JobId + queue_name: str + job_definition_name: str + + @dataclasses.dataclass class JobsResponse(ListResponse[JobItem]): items: list[JobItem] diff --git a/src/saturn_engine/worker_manager/api/jobs.py b/src/saturn_engine/worker_manager/api/jobs.py index d07ced55..5191c80f 100644 --- a/src/saturn_engine/worker_manager/api/jobs.py +++ b/src/saturn_engine/worker_manager/api/jobs.py @@ -8,9 +8,11 @@ from saturn_engine.core.api import JobsStatesSyncInput from saturn_engine.core.api import JobsStatesSyncResponse from saturn_engine.core.api import JobsSyncResponse +from saturn_engine.core.api import StartJobInput from saturn_engine.core.api import UpdateResponse from saturn_engine.database import session_scope from saturn_engine.stores import jobs_store +from saturn_engine.utils import utcnow from saturn_engine.utils.flask import Json from saturn_engine.utils.flask import abort from saturn_engine.utils.flask import check_found @@ -93,3 +95,21 @@ def post_fetch_states() -> Json[FetchCursorsStatesResponse]: session=session, ) return jsonify(FetchCursorsStatesResponse(cursors=cursors)) + + +@bp.route("/_start", methods=("POST",)) +def post_start_job() -> Json[JobResponse]: + start_input = marshall_request(StartJobInput) + with session_scope() as session: + job = jobs_store.get_job(session=session, name=start_input.name) + if job: + jobs_store.update_job( + session=session, name=start_input.name, completed_at=utcnow() + ) + new_job = jobs_store.create_job( + session=session, + name=start_input.name, + queue_name=start_input.queue_name, + job_definition_name=start_input.job_definition_name, + ) + return jsonify(JobResponse(data=new_job.as_core_item())) \ No newline at end of file