Skip to content

Commit 0a1a1a4

Browse files
continue upgrading
1 parent 9d93d7e commit 0a1a1a4

File tree

8 files changed

+42
-45
lines changed

8 files changed

+42
-45
lines changed

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

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@
1212

1313
from models_library.basic_types import ConstrainedStr, KeyIDStr
1414
from pydantic import (
15-
AfterValidator,
1615
AnyUrl,
1716
BaseModel,
17+
BeforeValidator,
1818
ConfigDict,
1919
Field,
2020
StringConstraints,
@@ -45,6 +45,9 @@
4545
]
4646

4747

48+
_ANY_URL_ADAPTER: TypeAdapter[AnyUrl] = TypeAdapter(AnyUrl)
49+
50+
4851
class SimcoreS3DirectoryID(ConstrainedStr):
4952
"""
5053
A simcore directory has the following structure:
@@ -122,9 +125,9 @@ class PortLink(BaseModel):
122125
class DownloadLink(BaseModel):
123126
"""I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)"""
124127

125-
download_link: Annotated[AnyUrl, AfterValidator(str)] = Field(
126-
..., alias="downloadLink"
127-
)
128+
download_link: Annotated[
129+
str, BeforeValidator(lambda x: str(_ANY_URL_ADAPTER.validate_python(x)))
130+
] = Field(..., alias="downloadLink")
128131
label: str | None = Field(default=None, description="Display name")
129132
model_config = ConfigDict(
130133
extra="forbid",

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

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,7 @@ class ContainerSpec(BaseModel):
4343
max_length=2,
4444
)
4545

46-
model_config = ConfigDict(
47-
**_BaseConfig,
46+
model_config = _BaseConfig | ConfigDict(
4847
json_schema_extra={
4948
"examples": [
5049
{"Command": ["executable"]},
@@ -102,8 +101,7 @@ def ensure_backwards_compatible_setting_type(cls, v):
102101
return "Resources"
103102
return v
104103

105-
model_config = ConfigDict(
106-
**_BaseConfig,
104+
model_config = _BaseConfig | ConfigDict(
107105
populate_by_name=True,
108106
json_schema_extra={
109107
"examples": [
@@ -221,8 +219,7 @@ def validate_volume_limits(cls, v, info: ValidationInfo) -> str | None:
221219
output: str | None = v
222220
return output
223221

224-
model_config = ConfigDict(
225-
**_BaseConfig,
222+
model_config = _BaseConfig | ConfigDict(
226223
json_schema_extra={
227224
"examples": [
228225
{

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

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,14 @@
11
from collections.abc import Generator
22
from typing import Final
33

4-
from pydantic import (
5-
BaseModel,
6-
ConfigDict,
7-
Field,
8-
TypeAdapter,
9-
ValidationInfo,
10-
field_validator,
11-
)
4+
from pydantic import BaseModel, ConfigDict, Field, ValidationInfo, field_validator
125

136
from .basic_types import PortInt
147
from .osparc_variable_identifier import OsparcVariableIdentifier, raise_if_unresolved
158

169
# Cloudflare DNS server address
1710
DEFAULT_DNS_SERVER_ADDRESS: Final[str] = "1.1.1.1" # NOSONAR
18-
DEFAULT_DNS_SERVER_PORT: Final[PortInt] = TypeAdapter(PortInt).validate_python(53)
11+
DEFAULT_DNS_SERVER_PORT: Final[PortInt] = 53
1912

2013

2114
class _PortRange(BaseModel):

packages/models-library/tests/test_osparc_variable_identifier.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,11 @@
4141
]
4242

4343

44+
_OSPARC_VARIABLE_IDENTIFIER_ADAPTER: TypeAdapter[
45+
OsparcVariableIdentifier
46+
] = TypeAdapter(OsparcVariableIdentifier)
47+
48+
4449
@pytest.fixture(params=VALID_IDENTIFIERS)
4550
def osparc_variable_identifier_str(request: pytest.FixtureRequest) -> str:
4651
return request.param
@@ -50,15 +55,15 @@ def osparc_variable_identifier_str(request: pytest.FixtureRequest) -> str:
5055
def identifier(
5156
osparc_variable_identifier_str: str,
5257
) -> OsparcVariableIdentifier:
53-
return TypeAdapter(OsparcVariableIdentifier).validate_python(
58+
return _OSPARC_VARIABLE_IDENTIFIER_ADAPTER.validate_python(
5459
osparc_variable_identifier_str
5560
)
5661

5762

5863
@pytest.mark.parametrize("invalid_var_name", INVALID_IDENTIFIERS)
5964
def test_osparc_variable_identifier_does_not_validate(invalid_var_name: str):
6065
with pytest.raises(ValidationError):
61-
TypeAdapter(OsparcVariableIdentifier).validate_python(invalid_var_name)
66+
_OSPARC_VARIABLE_IDENTIFIER_ADAPTER.validate_python(invalid_var_name)
6267

6368

6469
def test_raise_if_unresolved(identifier: OsparcVariableIdentifier):
@@ -78,17 +83,17 @@ class Example(BaseModel):
7883
@pytest.mark.parametrize(
7984
"object_template",
8085
[
81-
TypeAdapter(OsparcVariableIdentifier).validate_python("$OSPARC_VARIABLE_1"),
82-
[TypeAdapter(OsparcVariableIdentifier).validate_python("$OSPARC_VARIABLE_1")],
83-
(TypeAdapter(OsparcVariableIdentifier).validate_python("$OSPARC_VARIABLE_1"),),
84-
{TypeAdapter(OsparcVariableIdentifier).validate_python("$OSPARC_VARIABLE_1")},
86+
_OSPARC_VARIABLE_IDENTIFIER_ADAPTER.validate_python("$OSPARC_VARIABLE_1"),
87+
[_OSPARC_VARIABLE_IDENTIFIER_ADAPTER.validate_python("$OSPARC_VARIABLE_1")],
88+
(_OSPARC_VARIABLE_IDENTIFIER_ADAPTER.validate_python("$OSPARC_VARIABLE_1"),),
89+
{_OSPARC_VARIABLE_IDENTIFIER_ADAPTER.validate_python("$OSPARC_VARIABLE_1")},
8590
{
86-
"test": TypeAdapter(OsparcVariableIdentifier).validate_python(
91+
"test": _OSPARC_VARIABLE_IDENTIFIER_ADAPTER.validate_python(
8792
"$OSPARC_VARIABLE_1"
8893
)
8994
},
9095
Example(
91-
nested_objects=TypeAdapter(OsparcVariableIdentifier).validate_python(
96+
nested_objects=_OSPARC_VARIABLE_IDENTIFIER_ADAPTER.validate_python(
9297
"$OSPARC_VARIABLE_1"
9398
)
9499
),
@@ -155,7 +160,7 @@ def test_osparc_variable_name_and_default_value(
155160
expected_osparc_variable_name: str,
156161
expected_default_value: str | None,
157162
):
158-
osparc_variable_identifer = TypeAdapter(OsparcVariableIdentifier).validate_python(
163+
osparc_variable_identifer = _OSPARC_VARIABLE_IDENTIFIER_ADAPTER.validate_python(
159164
str_identifier
160165
)
161166
assert osparc_variable_identifer.name == expected_osparc_variable_name

packages/models-library/tests/test_utils_serialization.py

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from typing import Final
2+
13
import pytest
24
from models_library.utils.serialization import model_dump_with_secrets
35
from pydantic import BaseModel, SecretStr
@@ -8,9 +10,7 @@ class Credentials(BaseModel):
810
PASSWORD: SecretStr | None = None
911

1012

11-
@pytest.fixture()
12-
def my_credentials() -> Credentials:
13-
return Credentials(USERNAME="DeepThought", PASSWORD=SecretStr("42"))
13+
ME: Final[Credentials] = Credentials(USERNAME="DeepThought", PASSWORD=SecretStr("42"))
1414

1515

1616
@pytest.mark.parametrize(
@@ -26,9 +26,5 @@ def my_credentials() -> Credentials:
2626
),
2727
],
2828
)
29-
def test_model_dump_with_secrets(
30-
my_credentials: Credentials, expected: dict, show_secrets: bool
31-
):
32-
assert expected == model_dump_with_secrets(
33-
my_credentials, show_secrets=show_secrets
34-
)
29+
def test_model_dump_with_secrets(expected: dict, show_secrets: bool):
30+
assert expected == model_dump_with_secrets(ME, show_secrets=show_secrets)

packages/postgres-database/src/simcore_postgres_database/utils_folders.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ def _get_filter_for_enabled_permissions(
310310

311311
class FolderEntry(BaseModel):
312312
id: _FolderID
313-
parent_folder: _FolderID | None = Field(None, alias="traversal_parent_id")
313+
parent_folder: _FolderID | None = Field(alias="traversal_parent_id")
314314
name: str
315315
description: str
316316
owner: _GroupID = Field(alias="created_by")

packages/service-library/src/servicelib/aiohttp/long_running_tasks/_server.py

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

2929
_logger = logging.getLogger(__name__)
3030

31+
_ANY_HTTP_URL_ADAPTER: TypeAdapter[AnyHttpUrl] = TypeAdapter(AnyHttpUrl)
32+
3133

3234
def no_ops_decorator(handler: Handler):
3335
return handler
@@ -67,13 +69,13 @@ async def start_long_running_task(
6769
ip_addr, port = request_.transport.get_extra_info(
6870
"sockname"
6971
) # https://docs.python.org/3/library/asyncio-protocol.html#asyncio.BaseTransport.get_extra_info
70-
status_url = TypeAdapter(AnyHttpUrl).validate_python(
71-
f"http://{ip_addr}:{port}{request_.app.router['get_task_status'].url_for(task_id=task_id)}" # NOSONAR
72+
status_url = _ANY_HTTP_URL_ADAPTER.validate_python(
73+
f"http://{ip_addr}:{port}{request_.app.router['get_task_status'].url_for(task_id=task_id)}" # NOSONAR
7274
)
73-
result_url = TypeAdapter(AnyHttpUrl).validate_python(
74-
f"http://{ip_addr}:{port}{request_.app.router['get_task_result'].url_for(task_id=task_id)}" # NOSONAR
75+
result_url = _ANY_HTTP_URL_ADAPTER.validate_python(
76+
f"http://{ip_addr}:{port}{request_.app.router['get_task_result'].url_for(task_id=task_id)}" # NOSONAR
7577
)
76-
abort_url = TypeAdapter(AnyHttpUrl).validate_python(
78+
abort_url = _ANY_HTTP_URL_ADAPTER.validate_python(
7779
f"http://{ip_addr}:{port}{request_.app.router['cancel_and_delete_task'].url_for(task_id=task_id)}" # NOSONAR
7880
)
7981
task_get = TaskGet(

packages/service-library/src/servicelib/fastapi/long_running_tasks/_client.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323

2424
DEFAULT_HTTP_REQUESTS_TIMEOUT: Final[PositiveFloat] = 15
2525

26+
_ANY_HTTP_URL_ADAPTER: TypeAdapter[AnyHttpUrl] = TypeAdapter(AnyHttpUrl)
27+
2628
logger = logging.getLogger(__name__)
2729

2830

@@ -129,10 +131,9 @@ def _client_configuration(self) -> ClientConfiguration:
129131
return output
130132

131133
def _get_url(self, path: str) -> AnyHttpUrl:
132-
output: AnyHttpUrl = TypeAdapter(AnyHttpUrl).validate_python(
134+
return _ANY_HTTP_URL_ADAPTER.validate_python(
133135
f"{self._base_url}{self._client_configuration.router_prefix}{path}",
134136
)
135-
return output
136137

137138
@retry_on_http_errors
138139
async def get_task_status(

0 commit comments

Comments
 (0)