Skip to content

Commit c5a63e6

Browse files
committed
move validate_function_inputs
1 parent 5033949 commit c5a63e6

File tree

2 files changed

+37
-27
lines changed

2 files changed

+37
-27
lines changed

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

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from collections.abc import Callable
22
from dataclasses import dataclass
33

4+
import jsonschema
45
from common_library.exclude import as_dict_exclude_none
56
from models_library.functions import (
67
FunctionClass,
@@ -11,6 +12,7 @@
1112
FunctionJobCollectionID,
1213
FunctionJobID,
1314
FunctionJobStatus,
15+
FunctionSchemaClass,
1416
ProjectFunctionJob,
1517
RegisteredFunction,
1618
RegisteredFunctionJob,
@@ -31,6 +33,7 @@
3133
from models_library.rest_pagination import PageMetaInfoLimitOffset, PageOffsetInt
3234
from models_library.rpc_pagination import PageLimitInt
3335
from models_library.users import UserID
36+
from pydantic import ValidationError
3437

3538
from ._service_jobs import JobService
3639
from .models.schemas.jobs import JobInputs, JobPricingSpecification
@@ -82,8 +85,34 @@ async def list_function_jobs(
8285
**pagination_kwargs,
8386
)
8487

85-
async def validate_function_inputs(self, *args, **kwargs) -> tuple[bool, str]:
86-
return True, ""
88+
async def validate_function_inputs(
89+
self, *, function_id: FunctionID, inputs: FunctionInputs
90+
) -> tuple[bool, str]:
91+
function = await self._web_rpc_client.get_function(
92+
function_id=function_id,
93+
user_id=self.user_id,
94+
product_name=self.product_name,
95+
)
96+
97+
if (
98+
function.input_schema is None
99+
or function.input_schema.schema_content is None
100+
):
101+
return True, "No input schema defined for this function"
102+
103+
if function.input_schema.schema_class == FunctionSchemaClass.json_schema:
104+
try:
105+
jsonschema.validate(
106+
instance=inputs, schema=function.input_schema.schema_content
107+
)
108+
except ValidationError as err:
109+
return False, str(err)
110+
return True, "Inputs are valid"
111+
112+
return (
113+
False,
114+
f"Unsupported function schema class {function.input_schema.schema_class}",
115+
)
87116

88117
async def inspect_function_job(
89118
self, function: RegisteredFunction, function_job: RegisteredFunctionJob

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

Lines changed: 6 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,16 @@
22
from collections.abc import Callable
33
from typing import Annotated, Final, Literal
44

5-
import jsonschema
65
from fastapi import APIRouter, Depends, Header, Request, status
76
from fastapi_pagination.api import create_page
87
from fastapi_pagination.bases import AbstractPage
9-
from jsonschema import ValidationError
108
from models_library.api_schemas_api_server.functions import (
119
Function,
1210
FunctionID,
1311
FunctionInputs,
1412
FunctionInputSchema,
1513
FunctionInputsList,
1614
FunctionOutputSchema,
17-
FunctionSchemaClass,
1815
RegisteredFunction,
1916
RegisteredFunctionJob,
2017
RegisteredFunctionJobCollection,
@@ -295,29 +292,13 @@ async def get_function_outputschema(
295292
async def validate_function_inputs(
296293
function_id: FunctionID,
297294
inputs: FunctionInputs,
298-
wb_api_rpc: Annotated[WbApiRpcClient, Depends(get_wb_api_rpc_client)],
299-
user_id: Annotated[UserID, Depends(get_current_user_id)],
300-
product_name: Annotated[ProductName, Depends(get_product_name)],
295+
function_job_service: Annotated[
296+
FunctionJobService, Depends(get_function_job_service)
297+
],
301298
) -> tuple[bool, str]:
302-
function = await wb_api_rpc.get_function(
303-
function_id=function_id, user_id=user_id, product_name=product_name
304-
)
305-
306-
if function.input_schema is None or function.input_schema.schema_content is None:
307-
return True, "No input schema defined for this function"
308-
309-
if function.input_schema.schema_class == FunctionSchemaClass.json_schema:
310-
try:
311-
jsonschema.validate(
312-
instance=inputs, schema=function.input_schema.schema_content
313-
)
314-
except ValidationError as err:
315-
return False, str(err)
316-
return True, "Inputs are valid"
317-
318-
return (
319-
False,
320-
f"Unsupported function schema class {function.input_schema.schema_class}",
299+
return await function_job_service.validate_function_inputs(
300+
function_id=function_id,
301+
inputs=inputs,
321302
)
322303

323304

0 commit comments

Comments
 (0)