Skip to content

Commit 14589fb

Browse files
committed
Constrain has function id string
1 parent 36fe6a7 commit 14589fb

File tree

2 files changed

+13
-8
lines changed

2 files changed

+13
-8
lines changed

packages/models-library/src/models_library/functions.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
from common_library.errors_classes import OsparcErrorMixin
77
from models_library import projects
8+
from models_library.basic_regex import UUID_RE_BASE
9+
from models_library.basic_types import ConstrainedStr
810
from models_library.services_types import ServiceKey, ServiceVersion
911
from pydantic import BaseModel, Field
1012

@@ -276,12 +278,11 @@ class RegisteredFunctionJobCollectionDB(FunctionJobCollectionDB):
276278
uuid: FunctionJobCollectionID
277279

278280

281+
class FunctionIDString(ConstrainedStr):
282+
pattern = UUID_RE_BASE
283+
284+
279285
class FunctionJobCollectionsListFilters(BaseModel):
280286
"""Filters for listing function job collections"""
281287

282-
has_function_id: Annotated[
283-
str | None,
284-
Field(
285-
description="Filter by having a function ID in the collection",
286-
),
287-
] = None
288+
has_function_id: FunctionIDString | None = None

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
RegisteredFunctionJobDB,
2121
)
2222
from models_library.rest_pagination import PageMetaInfoLimitOffset
23+
from pydantic import TypeAdapter
2324
from simcore_postgres_database.models.funcapi_function_job_collections_table import (
2425
function_job_collections_table,
2526
)
@@ -292,9 +293,12 @@ async def list_function_job_collections(
292293
"""
293294

294295
async with transaction_context(get_asyncpg_engine(app), connection) as conn:
295-
filter_condition = sqlalchemy.sql.true()
296+
filter_condition: sqlalchemy.sql.ColumnElement = sqlalchemy.sql.true()
296297

297298
if filters and filters.has_function_id:
299+
function_id = TypeAdapter(FunctionID).validate_python(
300+
filters.has_function_id
301+
)
298302
subquery = (
299303
function_job_collections_to_function_jobs_table.select()
300304
.with_only_columns(
@@ -307,7 +311,7 @@ async def list_function_job_collections(
307311
function_job_collections_to_function_jobs_table.c.function_job_uuid
308312
== function_jobs_table.c.uuid,
309313
)
310-
.where(function_jobs_table.c.function_uuid == filters.has_function_id)
314+
.where(function_jobs_table.c.function_uuid == function_id)
311315
)
312316
filter_condition = function_job_collections_table.c.uuid.in_(subquery)
313317
total_count_result = await conn.scalar(

0 commit comments

Comments
 (0)