Skip to content

Commit 2cddbd8

Browse files
continue upgrading
1 parent 532206e commit 2cddbd8

File tree

8 files changed

+39
-35
lines changed

8 files changed

+39
-35
lines changed

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

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,9 @@
4040
LocationName = str
4141

4242

43-
class SimcoreS3FileID(ConstrainedStr):
44-
pattern: re.Pattern[str] | None = re.compile(SIMCORE_S3_FILE_ID_RE)
43+
SimcoreS3FileID: TypeAlias = Annotated[
44+
str, StringConstraints(pattern=SIMCORE_S3_FILE_ID_RE)
45+
]
4546

4647

4748
class SimcoreS3DirectoryID(ConstrainedStr):
@@ -87,9 +88,7 @@ def from_simcore_s3_object(cls, s3_object: str) -> "SimcoreS3DirectoryID":
8788
return TypeAdapter(cls).validate_python(f"{parent_path}/")
8889

8990

90-
class DatCoreFileID(ConstrainedStr):
91-
regex: re.Pattern[str] | None = re.compile(DATCORE_FILE_ID_RE)
92-
91+
DatCoreFileID: TypeAlias = Annotated[str, StringConstraints(pattern=DATCORE_FILE_ID_RE)]
9392

9493
StorageFileID: TypeAlias = SimcoreS3FileID | DatCoreFileID
9594

@@ -123,7 +122,7 @@ class PortLink(BaseModel):
123122
class DownloadLink(BaseModel):
124123
"""I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)"""
125124

126-
download_link: Annotated[str, AnyUrl] = Field(..., alias="downloadLink")
125+
download_link: AnyUrl = Field(..., alias="downloadLink")
127126
label: str | None = Field(default=None, description="Display name")
128127
model_config = ConfigDict(
129128
extra="forbid",
@@ -145,11 +144,13 @@ class BaseFileLink(BaseModel):
145144
store: LocationID = Field(
146145
...,
147146
description="The store identifier: 0 for simcore S3, 1 for datcore",
147+
validate_default=True,
148148
)
149149

150150
path: StorageFileID = Field(
151151
...,
152152
description="The path to the file in the storage provider domain",
153+
union_mode="left_to_right",
153154
)
154155

155156
label: str | None = Field(

packages/simcore-sdk/src/simcore_sdk/node_ports_v2/nodeports_v2.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class Nodeports(BaseModel):
4444
]
4545
auto_update: bool = False
4646
r_clone_settings: RCloneSettings | None = None
47-
io_log_redirect_cb: LogRedirectCB | None
47+
io_log_redirect_cb: LogRedirectCB | None = None
4848
aws_s3_cli_settings: AwsS3CliSettings | None = None
4949
model_config = ConfigDict(
5050
arbitrary_types_allowed=True,

packages/simcore-sdk/src/simcore_sdk/node_ports_v2/port.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ class Port(BaseServiceIOModel):
8080
widget: dict[str, Any] | None = None
8181
default_value: DataItemValue | None = Field(None, alias="defaultValue")
8282

83-
value: DataItemValue | None = Field(None, validate_default=True)
83+
value: DataItemValue | None = Field(None, validate_default=True, union_mode="left_to_right")
8484

8585
# Different states of "value"
8686
# - e.g. typically after resolving a port's link, a download link, ...

packages/simcore-sdk/tests/helpers/utils_port_v2.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,5 +45,5 @@ def create_valid_port_mapping(
4545
key=key_for_file_port,
4646
fileToKeyMap={file_to_key: key_for_file_port} if file_to_key else None,
4747
)
48-
port_mapping = mapping_class(**{"__root__": port_cfgs})
48+
port_mapping = mapping_class(**{"root": port_cfgs})
4949
return port_mapping

packages/simcore-sdk/tests/unit/test_node_ports_common_file_io_utils.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
UploadedPart,
2020
)
2121
from moto.server import ThreadedMotoServer
22-
from pydantic import AnyUrl, ByteSize, parse_obj_as
22+
from pydantic import AnyUrl, ByteSize, TypeAdapter, parse_obj_as
2323
from pytest_mock import MockerFixture
2424
from servicelib.aiohttp import status
2525
from servicelib.progress_bar import ProgressBarData
@@ -234,8 +234,8 @@ async def _creator(num_upload_links: int, chunk_size: ByteSize) -> FileUploadSch
234234
chunk_size=chunk_size,
235235
urls=upload_links,
236236
links=FileUploadLinks(
237-
abort_upload=parse_obj_as(AnyUrl, faker.uri()),
238-
complete_upload=parse_obj_as(AnyUrl, faker.uri()),
237+
abort_upload=TypeAdapter(AnyUrl).validate_python(faker.uri()),
238+
complete_upload=TypeAdapter(AnyUrl).validate_python(faker.uri()),
239239
),
240240
)
241241

@@ -245,7 +245,12 @@ async def _creator(num_upload_links: int, chunk_size: ByteSize) -> FileUploadSch
245245
@pytest.mark.skip(reason="this will allow to reproduce an issue")
246246
@pytest.mark.parametrize(
247247
"file_size,used_chunk_size",
248-
[(parse_obj_as(ByteSize, 21800510238), parse_obj_as(ByteSize, 10485760))],
248+
[
249+
(
250+
TypeAdapter(ByteSize).validate_python(21800510238),
251+
TypeAdapter(ByteSize).validate_python(10485760),
252+
)
253+
],
249254
)
250255
async def test_upload_file_to_presigned_links(
251256
client_session: ClientSession,

packages/simcore-sdk/tests/unit/test_node_ports_v2_port.py

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,7 @@
2222
from faker import Faker
2323
from models_library.api_schemas_storage import FileMetaDataGet
2424
from models_library.projects_nodes_io import LocationID
25-
from pydantic import parse_obj_as
26-
from pydantic.error_wrappers import ValidationError
25+
from pydantic import TypeAdapter, ValidationError
2726
from pytest_mock.plugin import MockerFixture
2827
from servicelib.progress_bar import ProgressBarData
2928
from simcore_sdk.node_ports_common.file_io_utils import LogRedirectCB
@@ -218,8 +217,7 @@ def e_tag_fixture() -> str:
218217
async def mock_filemanager(mocker: MockerFixture, e_tag: str, faker: Faker) -> None:
219218
mocker.patch(
220219
"simcore_sdk.node_ports_common.filemanager._get_file_meta_data",
221-
return_value=parse_obj_as(
222-
FileMetaDataGet,
220+
return_value=TypeAdapter(FileMetaDataGet).validate_python(
223221
FileMetaDataGet.model_config["json_schema_extra"]["examples"][0],
224222
),
225223
)
@@ -320,7 +318,7 @@ class PortParams(NamedTuple):
320318
exp_new_value=FileLink(
321319
store=simcore_store_id(),
322320
path=f"{project_id()}/{node_uuid()}/no_file/{this_node_file_name().name}",
323-
e_tag=e_tag(),
321+
eTag=e_tag(),
324322
),
325323
exp_new_get_value=download_file_folder_name()
326324
/ "no_file"
@@ -343,7 +341,7 @@ class PortParams(NamedTuple):
343341
exp_new_value=FileLink(
344342
store=simcore_store_id(),
345343
path=f"{project_id()}/{node_uuid()}/no_file_with_default/{this_node_file_name().name}",
346-
e_tag=e_tag(),
344+
eTag=e_tag(),
347345
),
348346
exp_new_get_value=download_file_folder_name()
349347
/ "no_file_with_default"
@@ -431,7 +429,7 @@ class PortParams(NamedTuple):
431429
exp_new_value=FileLink(
432430
store=simcore_store_id(),
433431
path=f"{project_id()}/{node_uuid()}/some_file_on_datcore/{this_node_file_name().name}",
434-
e_tag=e_tag(),
432+
eTag=e_tag(),
435433
),
436434
exp_new_get_value=download_file_folder_name()
437435
/ "some_file_on_datcore"
@@ -460,7 +458,7 @@ class PortParams(NamedTuple):
460458
exp_new_value=FileLink(
461459
store=simcore_store_id(),
462460
path=f"{project_id()}/{node_uuid()}/download_link/{this_node_file_name().name}",
463-
e_tag=e_tag(),
461+
eTag=e_tag(),
464462
),
465463
exp_new_get_value=download_file_folder_name()
466464
/ "download_link"
@@ -492,7 +490,7 @@ class PortParams(NamedTuple):
492490
exp_new_value=FileLink(
493491
store=simcore_store_id(),
494492
path=f"{project_id()}/{node_uuid()}/download_link_with_file_to_key/{this_node_file_name().name}",
495-
e_tag=e_tag(),
493+
eTag=e_tag(),
496494
),
497495
exp_new_get_value=download_file_folder_name()
498496
/ "download_link_with_file_to_key"
@@ -523,7 +521,7 @@ class PortParams(NamedTuple):
523521
exp_new_value=FileLink(
524522
store=simcore_store_id(),
525523
path=f"{project_id()}/{node_uuid()}/file_port_link/{this_node_file_name().name}",
526-
e_tag=e_tag(),
524+
eTag=e_tag(),
527525
),
528526
exp_new_get_value=download_file_folder_name()
529527
/ "file_port_link"
@@ -557,7 +555,7 @@ class PortParams(NamedTuple):
557555
exp_new_value=FileLink(
558556
store=simcore_store_id(),
559557
path=f"{project_id()}/{node_uuid()}/file_port_link_with_file_to_key_map/{this_node_file_name().name}",
560-
e_tag=e_tag(),
558+
eTag=e_tag(),
561559
),
562560
exp_new_get_value=download_file_folder_name()
563561
/ "file_port_link_with_file_to_key_map"

packages/simcore-sdk/tests/unit/test_node_ports_v2_port_mapping.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
@pytest.mark.parametrize("port_class", [InputsList, OutputsList])
2020
def test_empty_ports_mapping(port_class: type[InputsList | OutputsList]):
21-
port_mapping = port_class(__root__={})
21+
port_mapping = port_class(root={})
2222
assert not port_mapping.items()
2323
assert not port_mapping.values()
2424
assert not port_mapping.keys()
@@ -36,10 +36,10 @@ def test_filled_ports_mapping(port_class: type[InputsList | OutputsList]):
3636
port_cfgs[port["key"]] = port
3737
port_cfgs["some_file"] = create_valid_port_config("data:*/*", key="some_file")
3838

39-
port_mapping = port_class(__root__=port_cfgs)
39+
port_mapping = port_class(root=port_cfgs)
4040

4141
# two ways to construct instances of __root__
42-
assert port_class.parse_obj(port_cfgs) == port_mapping
42+
assert port_class.model_validate(port_cfgs) == port_mapping
4343

4444
assert len(port_mapping) == len(port_cfgs)
4545
for port_key, port_value in port_mapping.items():
@@ -61,8 +61,8 @@ def test_filled_ports_mapping(port_class: type[InputsList | OutputsList]):
6161
def test_io_ports_are_not_aliases():
6262
# prevents creating alises as InputsList = PortsMappings
6363

64-
inputs = InputsList(__root__={})
65-
outputs = OutputsList(__root__={})
64+
inputs = InputsList(root={})
65+
outputs = OutputsList(root={})
6666

6767
assert isinstance(inputs, InputsList)
6868
assert not isinstance(inputs, OutputsList)

packages/simcore-sdk/tests/unit/test_storage_client.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
)
2121
from models_library.projects_nodes_io import SimcoreS3FileID
2222
from models_library.users import UserID
23-
from pydantic import AnyUrl, ByteSize, parse_obj_as
23+
from pydantic import AnyUrl, ByteSize, TypeAdapter
2424
from pytest_simcore.helpers.monkeypatch_envs import EnvVarsDict, setenvs_from_dict
2525
from servicelib.aiohttp import status
2626
from simcore_sdk.node_ports_common import exceptions
@@ -176,7 +176,7 @@ async def test_get_file_metada(
176176
session=session, file_id=file_id, location_id=location_id, user_id=user_id
177177
)
178178
assert file_metadata
179-
assert file_metadata == FileMetaDataGet.parse_obj(
179+
assert file_metadata == FileMetaDataGet.model_validate(
180180
FileMetaDataGet.model_config["json_schema_extra"]["examples"][0]
181181
)
182182

@@ -362,12 +362,12 @@ def test_mode_ports_storage_without_auth(
362362
[
363363
(True, _HTTP_URL, _HTTPS_URL),
364364
(False, _HTTP_URL, _HTTP_URL),
365-
(True, parse_obj_as(AnyUrl, _HTTP_URL), _HTTPS_URL),
366-
(False, parse_obj_as(AnyUrl, _HTTP_URL), _HTTP_URL),
365+
(True, TypeAdapter(AnyUrl).validate_python(_HTTP_URL), _HTTPS_URL),
366+
(False, TypeAdapter(AnyUrl).validate_python(_HTTP_URL), _HTTP_URL),
367367
(True, _HTTPS_URL, _HTTPS_URL),
368368
(False, _HTTPS_URL, _HTTPS_URL),
369-
(True, parse_obj_as(AnyUrl, _HTTPS_URL), _HTTPS_URL),
370-
(False, parse_obj_as(AnyUrl, _HTTPS_URL), _HTTPS_URL),
369+
(True, TypeAdapter(AnyUrl).validate_python(_HTTPS_URL), _HTTPS_URL),
370+
(False, TypeAdapter(AnyUrl).validate_python(_HTTPS_URL), _HTTPS_URL),
371371
(True, "http://http", "https://http"),
372372
(True, "https://http", "https://http"),
373373
],

0 commit comments

Comments
 (0)