Skip to content

Commit a2d3742

Browse files
♻️ Fix unit tests after master merge (#6727)
1 parent 44bc9f7 commit a2d3742

File tree

9 files changed

+97
-83
lines changed

9 files changed

+97
-83
lines changed

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

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,14 @@
22
from enum import auto
33
from typing import TypeAlias
44

5-
from pydantic import BaseModel, ConfigDict, Field, PositiveInt, field_validator
5+
from pydantic import (
6+
BaseModel,
7+
ConfigDict,
8+
Field,
9+
PositiveInt,
10+
ValidationInfo,
11+
field_validator,
12+
)
613

714
from .access_rights import AccessRights
815
from .users import GroupID, UserID
@@ -24,16 +31,14 @@ class FolderQuery(BaseModel):
2431

2532
@field_validator("folder_id", mode="before")
2633
@classmethod
27-
def validate_folder_id(cls, value, values):
28-
scope = values.get("folder_scope")
34+
def validate_folder_id(cls, value, info: ValidationInfo):
35+
scope = info.data.get("folder_scope")
2936
if scope == FolderScope.SPECIFIC and value is None:
30-
raise ValueError(
31-
"folder_id must be provided when folder_scope is SPECIFIC."
32-
)
37+
msg = "folder_id must be provided when folder_scope is SPECIFIC."
38+
raise ValueError(msg)
3339
if scope != FolderScope.SPECIFIC and value is not None:
34-
raise ValueError(
35-
"folder_id should be None when folder_scope is not SPECIFIC."
36-
)
40+
msg = "folder_id should be None when folder_scope is not SPECIFIC."
41+
raise ValueError(msg)
3742
return value
3843

3944

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

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,14 @@
22
from enum import auto
33
from typing import TypeAlias
44

5-
from pydantic import BaseModel, ConfigDict, Field, PositiveInt, field_validator
5+
from pydantic import (
6+
BaseModel,
7+
ConfigDict,
8+
Field,
9+
PositiveInt,
10+
ValidationInfo,
11+
field_validator,
12+
)
613

714
from .access_rights import AccessRights
815
from .users import GroupID
@@ -23,16 +30,14 @@ class WorkspaceQuery(BaseModel):
2330

2431
@field_validator("workspace_id", mode="before")
2532
@classmethod
26-
def validate_workspace_id(cls, value, values):
27-
scope = values.get("workspace_scope")
33+
def validate_workspace_id(cls, value, info: ValidationInfo):
34+
scope = info.data.get("workspace_scope")
2835
if scope == WorkspaceScope.SHARED and value is None:
29-
raise ValueError(
30-
"workspace_id must be provided when workspace_scope is SHARED."
31-
)
36+
msg = "workspace_id must be provided when workspace_scope is SHARED."
37+
raise ValueError(msg)
3238
if scope != WorkspaceScope.SHARED and value is not None:
33-
raise ValueError(
34-
"workspace_id should be None when workspace_scope is not SHARED."
35-
)
39+
msg = "workspace_id should be None when workspace_scope is not SHARED."
40+
raise ValueError(msg)
3641
return value
3742

3843

packages/models-library/tests/test_projects_state.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ def test_project_locked_with_missing_owner_raises():
99

1010

1111
def test_project_locked_with_missing_owner_ok_during_maintaining():
12-
ProjectLocked.parse_obj({"value": True, "status": ProjectStatus.MAINTAINING})
12+
ProjectLocked.model_validate({"value": True, "status": ProjectStatus.MAINTAINING})
1313

1414

1515
@pytest.mark.parametrize(

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,15 @@
77
from models_library.projects_nodes_io import NodeID
88
from models_library.projects_pipeline import ComputationTask
99
from models_library.projects_state import RunningState
10-
from pydantic import AnyHttpUrl, AnyUrl, BaseModel, Field, PositiveInt, TypeAdapter
10+
from pydantic import (
11+
AnyHttpUrl,
12+
AnyUrl,
13+
BaseModel,
14+
ConfigDict,
15+
Field,
16+
PositiveInt,
17+
TypeAdapter,
18+
)
1119
from settings_library.tracing import TracingSettings
1220
from starlette import status
1321

services/datcore-adapter/src/simcore_service_datcore_adapter/core/settings.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from pydantic import AliasChoices, Field, TypeAdapter, field_validator
55
from pydantic.networks import AnyUrl
66
from servicelib.logging_utils_filtering import LoggerName, MessageSubstring
7+
from settings_library.application import BaseApplicationSettings
78
from settings_library.base import BaseCustomSettings
89
from settings_library.tracing import TracingSettings
910
from settings_library.utils_logging import MixinLoggingSettings
@@ -19,10 +20,7 @@ class PennsieveSettings(BaseCustomSettings):
1920
PENNSIEVE_HEALTCHCHECK_TIMEOUT: float = 1.0
2021

2122

22-
class ApplicationSettings(BaseCustomSettings, MixinLoggingSettings):
23-
# DOCKER
24-
SC_BOOT_MODE: BootModeEnum | None
25-
23+
class ApplicationSettings(BaseApplicationSettings, MixinLoggingSettings):
2624
LOG_LEVEL: LogLevel = Field(
2725
default=LogLevel.INFO.value,
2826
validation_alias=AliasChoices(

services/web/server/src/simcore_service_webserver/folders/_folders_handlers.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,10 +82,10 @@ async def list_folders(request: web.Request):
8282
trashed=query_params.filters.trashed,
8383
offset=query_params.offset,
8484
limit=query_params.limit,
85-
order_by=parse_obj_as(OrderBy, query_params.order_by),
85+
order_by=OrderBy.model_validate(query_params.order_by),
8686
)
8787

88-
page = Page[FolderGet].parse_obj(
88+
page = Page[FolderGet].model_validate(
8989
paginate_data(
9090
chunk=folders.items,
9191
request_url=request.url,
@@ -95,7 +95,7 @@ async def list_folders(request: web.Request):
9595
)
9696
)
9797
return web.Response(
98-
text=page.json(**RESPONSE_MODEL_POLICY),
98+
text=page.model_dump_json(**RESPONSE_MODEL_POLICY),
9999
content_type=MIMETYPE_APPLICATION_JSON,
100100
)
101101

@@ -105,7 +105,7 @@ async def list_folders(request: web.Request):
105105
@permission_required("folder.read")
106106
@handle_plugin_requests_exceptions
107107
async def list_folders_full_search(request: web.Request):
108-
req_ctx = FoldersRequestContext.parse_obj(request)
108+
req_ctx = FoldersRequestContext.model_validate(request)
109109
query_params: FolderListFullSearchWithJsonStrQueryParams = (
110110
parse_request_query_parameters_as(
111111
FolderListFullSearchWithJsonStrQueryParams, request

services/web/server/src/simcore_service_webserver/folders/_models.py

Lines changed: 24 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import logging
2+
from typing import Annotated
23

34
from models_library.basic_types import IDStr
45
from models_library.folders import FolderID
@@ -11,7 +12,14 @@
1112
null_or_none_str_to_none_validator,
1213
)
1314
from models_library.workspaces import WorkspaceID
14-
from pydantic import BaseModel, Extra, Field, Json, validator
15+
from pydantic import (
16+
BaseModel,
17+
BeforeValidator,
18+
ConfigDict,
19+
Field,
20+
Json,
21+
field_validator,
22+
)
1523
from servicelib.aiohttp.requests_validation import RequestParams, StrictRequestParams
1624
from servicelib.request_keys import RQT_USERID_KEY
1725

@@ -41,11 +49,11 @@ class FolderListSortParams(BaseModel):
4149
order_by: Json[OrderBy] = Field(
4250
default=OrderBy(field=IDStr("modified"), direction=OrderDirection.DESC),
4351
description="Order by field (modified_at|name|description) and direction (asc|desc). The default sorting order is ascending.",
44-
example='{"field": "name", "direction": "desc"}',
52+
examples=['{"field": "name", "direction": "desc"}'],
4553
alias="order_by",
4654
)
4755

48-
@validator("order_by", check_fields=False)
56+
@field_validator("order_by", check_fields=False)
4957
@classmethod
5058
def _validate_order_by_field(cls, v):
5159
if v.field not in {
@@ -59,51 +67,41 @@ def _validate_order_by_field(cls, v):
5967
v.field = "modified"
6068
return v
6169

62-
class Config:
63-
extra = Extra.forbid
70+
model_config = ConfigDict(extra="forbid")
6471

6572

6673
class FolderListWithJsonStrQueryParams(
6774
PageQueryParameters, FolderListSortParams, FiltersQueryParameters[FolderFilters]
6875
):
69-
folder_id: FolderID | None = Field(
76+
folder_id: Annotated[
77+
FolderID | None, BeforeValidator(null_or_none_str_to_none_validator)
78+
] = Field(
7079
default=None,
7180
description="List the subfolders of this folder. By default, list the subfolders of the root directory (Folder ID is None).",
7281
)
73-
workspace_id: WorkspaceID | None = Field(
82+
workspace_id: Annotated[
83+
WorkspaceID | None, BeforeValidator(null_or_none_str_to_none_validator)
84+
] = Field(
7485
default=None,
7586
description="List folders in specific workspace. By default, list in the user private workspace",
7687
)
7788

78-
class Config:
79-
extra = Extra.forbid
80-
81-
# validators
82-
_null_or_none_str_to_none_validator = validator(
83-
"folder_id", allow_reuse=True, pre=True
84-
)(null_or_none_str_to_none_validator)
85-
86-
_null_or_none_str_to_none_validator2 = validator(
87-
"workspace_id", allow_reuse=True, pre=True
88-
)(null_or_none_str_to_none_validator)
89+
model_config = ConfigDict(extra="forbid")
8990

9091

9192
class FolderListFullSearchWithJsonStrQueryParams(
9293
PageQueryParameters, FolderListSortParams, FiltersQueryParameters[FolderFilters]
9394
):
94-
text: str | None = Field(
95+
text: Annotated[
96+
str | None, BeforeValidator(empty_str_to_none_pre_validator)
97+
] = Field(
9598
default=None,
9699
description="Multi column full text search, across all folders and workspaces",
97100
max_length=100,
98-
example="My Project",
99-
)
100-
101-
_empty_is_none = validator("text", allow_reuse=True, pre=True)(
102-
empty_str_to_none_pre_validator
101+
examples=["My Project"],
103102
)
104103

105-
class Config:
106-
extra = Extra.forbid
104+
model_config = ConfigDict(extra="forbid")
107105

108106

109107
class RemoveQueryParams(BaseModel):

0 commit comments

Comments
 (0)