Skip to content

Commit 0a94743

Browse files
committed
start creating patch endpoint for function jobs
1 parent b306b19 commit 0a94743

File tree

4 files changed

+79
-13
lines changed

4 files changed

+79
-13
lines changed

services/web/server/src/simcore_service_webserver/functions/_controller/_functions_rpc.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
RegisteredFunction,
2121
RegisteredFunctionJob,
2222
RegisteredFunctionJobCollection,
23+
RegisteredFunctionJobPatch,
2324
)
2425
from models_library.functions_errors import (
2526
FunctionIDNotFoundError,
@@ -99,13 +100,16 @@ async def patch_registered_function_job(
99100
*,
100101
user_id: UserID,
101102
product_name: ProductName,
102-
registered_function_job: RegisteredFunctionJob,
103+
function_job_uuid: FunctionJobID,
104+
registered_function_job_patch: RegisteredFunctionJobPatch,
103105
) -> RegisteredFunctionJob:
106+
104107
return await _functions_service.patch_registered_function_job(
105108
app=app,
106109
user_id=user_id,
107110
product_name=product_name,
108-
registered_function_job=registered_function_job,
111+
function_job_uuid=function_job_uuid,
112+
registered_function_job_patch=registered_function_job_patch,
109113
)
110114

111115

services/web/server/src/simcore_service_webserver/functions/_functions_repository.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,50 @@ async def create_function_job( # noqa: PLR0913
234234
return registered_function_job
235235

236236

237+
async def patch_function_job( # noqa: PLR0913
238+
app: web.Application,
239+
connection: AsyncConnection | None = None,
240+
*,
241+
user_id: UserID,
242+
product_name: ProductName,
243+
function_job_uuid: FunctionJobID,
244+
title: str | None,
245+
description: str | None,
246+
**class_specific_data: FunctionJobClassSpecificData | None,
247+
) -> RegisteredFunctionJobDB:
248+
249+
update_params = {
250+
"title": title,
251+
"description": description,
252+
"class_specific_data": class_specific_data,
253+
}
254+
255+
async with transaction_context(get_asyncpg_engine(app), connection) as transaction:
256+
await check_user_api_access_rights(
257+
app,
258+
connection=transaction,
259+
user_id=user_id,
260+
product_name=product_name,
261+
api_access_rights=[
262+
FunctionsApiAccessRights.WRITE_FUNCTION_JOBS,
263+
],
264+
)
265+
result = await transaction.execute(
266+
function_jobs_table.update()
267+
.where(function_jobs_table.c.uuid == function_job_uuid)
268+
.values(
269+
status="created",
270+
**{k: v for k, v in update_params.items() if v is not None},
271+
)
272+
.returning(*_FUNCTION_JOBS_TABLE_COLS)
273+
)
274+
row = result.one()
275+
276+
registered_function_job = RegisteredFunctionJobDB.model_validate(row)
277+
278+
return registered_function_job
279+
280+
237281
async def create_function_job_collection(
238282
app: web.Application,
239283
connection: AsyncConnection | None = None,

services/web/server/src/simcore_service_webserver/functions/_functions_service.py

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
RegisteredFunctionJob,
2828
RegisteredFunctionJobCollection,
2929
RegisteredFunctionJobDB,
30+
RegisteredFunctionJobPatch,
3031
RegisteredProjectFunction,
3132
RegisteredProjectFunctionJob,
3233
RegisteredSolverFunction,
@@ -100,10 +101,26 @@ async def patch_registered_function_job(
100101
*,
101102
user_id: UserID,
102103
product_name: ProductName,
103-
registered_function_job: RegisteredFunctionJob,
104+
function_job_uuid: FunctionJobID,
105+
registered_function_job_patch: RegisteredFunctionJobPatch,
104106
) -> RegisteredFunctionJob:
105-
encoded_function_job = _encode_functionjob(registered_function_job)
106-
return registered_function_job
107+
job = await _functions_repository.get_function_job(
108+
app=app,
109+
user_id=user_id,
110+
product_name=product_name,
111+
function_job_id=function_job_uuid,
112+
)
113+
114+
await _functions_repository.patch_function_job(
115+
app=app,
116+
function_job_uuid=function_job_uuid,
117+
user_id=user_id,
118+
product_name=product_name,
119+
title=title,
120+
description=description,
121+
class_specific_data=class_specific_data,
122+
)
123+
return _decode_functionjob(job)
107124

108125

109126
async def register_function_job_collection(

services/web/server/tests/unit/with_dbs/04/functions/test_function_jobs_controller_rpc.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
FunctionClass,
1717
FunctionJobCollection,
1818
FunctionJobStatus,
19-
RegisteredProjectFunctionJob,
2019
)
2120
from models_library.functions_errors import (
2221
FunctionJobIDNotFoundError,
@@ -476,24 +475,26 @@ async def test_patch_registered_function_jobs(
476475
)
477476

478477
added_data = {"job_creation_task_id": f"{uuid4()}"}
479-
registered_job_dict = registered_job.model_dump()
480-
registered_job_dict.update(**added_data)
481-
registered_job = RegisteredProjectFunctionJob.model_validate(registered_job_dict)
482478

483479
registered_job = await functions_rpc.patch_registered_function_job(
484480
rabbitmq_rpc_client=rpc_client,
485481
user_id=logged_user["id"],
482+
function_job_uuid=registered_job.uid,
486483
product_name=osparc_product_name,
487-
registered_function_job=registered_job,
484+
job_creation_task_id=added_data["job_creation_task_id"],
488485
)
489486
assert registered_job.function_class == FunctionClass.PROJECT
490487
assert registered_job.job_creation_task_id == added_data["job_creation_task_id"]
491488

492489
added_data.update(project_job_id=f"{uuid4()}")
493490

494-
registered_job_dict = registered_job.model_dump()
495-
registered_job_dict.update(**added_data)
496-
registered_job = RegisteredProjectFunctionJob.model_validate(registered_job_dict)
491+
registered_job = await functions_rpc.patch_registered_function_job(
492+
rabbitmq_rpc_client=rpc_client,
493+
user_id=logged_user["id"],
494+
function_job_uuid=registered_job.uid,
495+
product_name=osparc_product_name,
496+
project_job_id=added_data["project_job_id"],
497+
)
497498
assert registered_job.function_class == FunctionClass.PROJECT
498499
assert registered_job.job_creation_task_id == added_data["job_creation_task_id"]
499500
assert registered_job.project_job_id == UUID(added_data["project_job_id"])

0 commit comments

Comments
 (0)