Skip to content

Commit 07f7ec8

Browse files
committed
cleanup
1 parent 52288be commit 07f7ec8

File tree

4 files changed

+44
-36
lines changed

4 files changed

+44
-36
lines changed

services/api-server/src/simcore_service_api_server/_service_function_jobs.py

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from dataclasses import dataclass
2-
from typing import NamedTuple, overload
2+
from typing import overload
33

44
import jsonschema
55
from common_library.exclude import as_dict_exclude_none
@@ -42,18 +42,14 @@
4242

4343
from ._service_jobs import JobService
4444
from .models.api_resources import JobLinks
45+
from .models.domain.functions import PreRegisteredFunctionJobData
4546
from .models.schemas.jobs import (
4647
JobInputs,
4748
JobPricingSpecification,
4849
)
4950
from .services_rpc.wb_api_server import WbApiRpcClient
5051

5152

52-
class RegisteredFunctionJobData(NamedTuple):
53-
function_job_id: FunctionJobID
54-
job_inputs: JobInputs
55-
56-
5753
def join_inputs(
5854
default_inputs: FunctionInputs | None,
5955
function_inputs: FunctionInputs | None,
@@ -191,10 +187,15 @@ async def get_cached_function_job(
191187
self,
192188
*,
193189
function: RegisteredFunction,
194-
function_inputs: FunctionInputs,
195190
job_inputs: JobInputs,
196191
) -> RegisteredFunctionJob:
197-
"""raises FunctionJobCacheNotFoundError if no cached job is found"""
192+
"""
193+
N.B. this function checks access rights
194+
195+
raises FunctionsExecuteApiAccessDeniedError if user cannot execute functions
196+
raises FunctionJobCacheNotFoundError if no cached job is found
197+
198+
"""
198199

199200
user_api_access_rights = (
200201
await self._web_rpc_client.get_functions_user_api_access_rights(
@@ -234,13 +235,12 @@ async def get_cached_function_job(
234235

235236
raise FunctionJobCacheNotFoundError()
236237

237-
async def create_registered_function_job(
238+
async def pre_register_function_job(
238239
self,
239240
*,
240241
function: RegisteredFunction,
241-
function_inputs: FunctionInputs,
242242
job_inputs: JobInputs,
243-
) -> FunctionJobID:
243+
) -> PreRegisteredFunctionJobData:
244244

245245
if function.input_schema is not None:
246246
is_valid, validation_str = await self.validate_function_inputs(
@@ -284,7 +284,10 @@ async def create_registered_function_job(
284284
function_class=function.function_class,
285285
)
286286

287-
return job.uid
287+
return PreRegisteredFunctionJobData(
288+
function_job_id=job.uid,
289+
job_inputs=job_inputs,
290+
)
288291

289292
@overload
290293
async def patch_registered_function_job(
@@ -368,8 +371,7 @@ async def run_function(
368371
*,
369372
job_creation_task_id: TaskID | None,
370373
function: RegisteredFunction,
371-
pre_registered_function_job_id: FunctionJobID,
372-
job_inputs: JobInputs,
374+
pre_registered_function_job_data: PreRegisteredFunctionJobData,
373375
pricing_spec: JobPricingSpecification | None,
374376
job_links: JobLinks,
375377
x_simcore_parent_project_uuid: NodeID | None,
@@ -380,7 +382,7 @@ async def run_function(
380382
if function.function_class == FunctionClass.PROJECT:
381383
study_job = await self._job_service.create_studies_job(
382384
study_id=function.project_id,
383-
job_inputs=job_inputs,
385+
job_inputs=pre_registered_function_job_data.job_inputs,
384386
hidden=True,
385387
job_links=job_links,
386388
x_simcore_parent_project_uuid=x_simcore_parent_project_uuid,
@@ -394,7 +396,7 @@ async def run_function(
394396
return await self.patch_registered_function_job(
395397
user_id=self.user_id,
396398
product_name=self.product_name,
397-
function_job_id=pre_registered_function_job_id,
399+
function_job_id=pre_registered_function_job_data.function_job_id,
398400
function_class=FunctionClass.PROJECT,
399401
job_creation_task_id=job_creation_task_id,
400402
project_job_id=study_job.id,
@@ -404,7 +406,7 @@ async def run_function(
404406
solver_job = await self._job_service.create_solver_job(
405407
solver_key=function.solver_key,
406408
version=function.solver_version,
407-
inputs=job_inputs,
409+
inputs=pre_registered_function_job_data.job_inputs,
408410
job_links=job_links,
409411
hidden=True,
410412
x_simcore_parent_project_uuid=x_simcore_parent_project_uuid,
@@ -419,7 +421,7 @@ async def run_function(
419421
return await self.patch_registered_function_job(
420422
user_id=self.user_id,
421423
product_name=self.product_name,
422-
function_job_id=pre_registered_function_job_id,
424+
function_job_id=pre_registered_function_job_data.function_job_id,
423425
function_class=FunctionClass.SOLVER,
424426
job_creation_task_id=job_creation_task_id,
425427
solver_job_id=solver_job.id,
@@ -434,7 +436,7 @@ async def map_function(
434436
*,
435437
job_creation_task_id: TaskID | None,
436438
function: RegisteredFunction,
437-
job_inputs: list[JobInputs],
439+
pre_registered_function_job_data_list: list[PreRegisteredFunctionJobData],
438440
job_links: JobLinks,
439441
pricing_spec: JobPricingSpecification | None,
440442
x_simcore_parent_project_uuid: ProjectID | None,
@@ -445,16 +447,16 @@ async def map_function(
445447
await self.run_function(
446448
job_creation_task_id=job_creation_task_id,
447449
function=function,
448-
job_inputs=inputs,
450+
pre_registered_function_job_data=data,
449451
pricing_spec=pricing_spec,
450452
job_links=job_links,
451453
x_simcore_parent_project_uuid=x_simcore_parent_project_uuid,
452454
x_simcore_parent_node_id=x_simcore_parent_node_id,
453455
)
454-
for inputs in job_inputs
456+
for data in pre_registered_function_job_data_list
455457
]
456458

457-
function_job_collection_description = f"Function job collection of map of function {function.uid} with {len(job_inputs)} inputs"
459+
function_job_collection_description = f"Function job collection of map of function {function.uid} with {len(pre_registered_function_job_data_list)} inputs"
458460
return await self._web_rpc_client.register_function_job_collection(
459461
function_job_collection=FunctionJobCollection(
460462
title="Function job collection of function map",

services/api-server/src/simcore_service_api_server/api/routes/functions_routes.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,7 @@ async def run_function( # noqa: PLR0913
334334
x_simcore_parent_project_uuid: Annotated[ProjectID | Literal["null"], Header()],
335335
x_simcore_parent_node_id: Annotated[NodeID | Literal["null"], Header()],
336336
) -> RegisteredFunctionJob:
337+
# massage inputs
337338
task_manager = get_task_manager(request.app)
338339
parent_project_uuid = (
339340
x_simcore_parent_project_uuid
@@ -351,20 +352,18 @@ async def run_function( # noqa: PLR0913
351352
function=to_run_function, function_inputs=function_inputs
352353
)
353354

355+
# check if results are cached
354356
try:
355-
# checks access rights
356357
return await function_job_service.get_cached_function_job(
357358
function=to_run_function,
358-
function_inputs=function_inputs,
359359
job_inputs=job_inputs,
360360
)
361361
except FunctionJobCacheNotFoundError:
362362
pass
363363

364-
pre_registered_function_job_id = (
365-
await function_job_service.create_registered_function_job(
364+
pre_registered_function_job_data = (
365+
await function_job_service.pre_register_function_job(
366366
function=to_run_function,
367-
function_inputs=function_inputs,
368367
job_inputs=job_inputs,
369368
)
370369
)
@@ -387,8 +386,7 @@ async def run_function( # noqa: PLR0913
387386
task_filter=task_filter,
388387
user_identity=user_identity,
389388
function=to_run_function,
390-
pre_registered_function_job_id=pre_registered_function_job_id,
391-
job_inputs=job_inputs,
389+
pre_registered_function_job_data=pre_registered_function_job_data,
392390
pricing_spec=pricing_spec,
393391
job_links=job_links,
394392
x_simcore_parent_project_uuid=parent_project_uuid,
@@ -398,7 +396,7 @@ async def run_function( # noqa: PLR0913
398396
return await function_job_service.patch_registered_function_job(
399397
user_id=user_identity.user_id,
400398
product_name=user_identity.product_name,
401-
function_job_id=pre_registered_function_job_id,
399+
function_job_id=pre_registered_function_job_data.function_job_id,
402400
function_class=to_run_function.function_class,
403401
job_creation_task_id=TaskID(task_uuid),
404402
)

services/api-server/src/simcore_service_api_server/celery/worker_tasks/functions_tasks.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
)
44
from celery_library.utils import get_app_server # pylint: disable=no-name-in-module
55
from fastapi import FastAPI
6-
from models_library.functions import FunctionJobID, RegisteredFunction
6+
from models_library.functions import RegisteredFunction
77
from models_library.projects_nodes_io import NodeID
88
from servicelib.celery.models import TaskID
99
from simcore_service_api_server._service_function_jobs import FunctionJobService
@@ -21,7 +21,8 @@
2121
from ...api.dependencies.webserver_http import get_session_cookie, get_webserver_session
2222
from ...api.dependencies.webserver_rpc import get_wb_api_rpc_client
2323
from ...models.api_resources import JobLinks
24-
from ...models.schemas.jobs import JobInputs, JobPricingSpecification
24+
from ...models.domain.functions import PreRegisteredFunctionJobData
25+
from ...models.schemas.jobs import JobPricingSpecification
2526
from ...services_http.director_v2 import DirectorV2Api
2627
from ...services_http.storage import StorageApi
2728

@@ -94,8 +95,7 @@ async def run_function(
9495
*,
9596
user_identity: Identity,
9697
function: RegisteredFunction,
97-
pre_registered_function_job_id: FunctionJobID,
98-
job_inputs: JobInputs,
98+
pre_registered_function_job_data: PreRegisteredFunctionJobData,
9999
pricing_spec: JobPricingSpecification | None,
100100
job_links: JobLinks,
101101
x_simcore_parent_project_uuid: NodeID | None,
@@ -110,8 +110,7 @@ async def run_function(
110110
return await function_job_service.run_function(
111111
job_creation_task_id=task_id,
112112
function=function,
113-
pre_registered_function_job_id=pre_registered_function_job_id,
114-
job_inputs=job_inputs,
113+
pre_registered_function_job_data=pre_registered_function_job_data,
115114
pricing_spec=pricing_spec,
116115
job_links=job_links,
117116
x_simcore_parent_project_uuid=x_simcore_parent_project_uuid,
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from models_library.functions import FunctionJobID
2+
from pydantic import BaseModel
3+
4+
from ...models.schemas.jobs import JobInputs
5+
6+
7+
class PreRegisteredFunctionJobData(BaseModel):
8+
function_job_id: FunctionJobID
9+
job_inputs: JobInputs

0 commit comments

Comments
 (0)